home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr47 / 335_03.zip / AS8096.Y < prev    next >
Text File  |  1993-04-01  |  58KB  |  2,143 lines

  1. %{
  2.  
  3. /*
  4. HEADER:     ;
  5. TITLE:         Frankenstein Cross Assemblers;
  6. VERSION:     2.0;
  7. DESCRIPTION: "    Reconfigurable Cross-assembler producing Intel (TM)
  8.         Hex format object records.  ";
  9. KEYWORDS:     cross-assemblers, 1805, 2650, 6301, 6502, 6805, 6809, 
  10.         6811, tms7000, 8048, 8051, 8096, z8, z80;
  11. SYSTEM:     UNIX, MS-Dos ;
  12. FILENAME:     as8096.y;
  13. WARNINGS:     "This software is in the public domain.  
  14.         Any prior copyright claims are relinquished.  
  15.  
  16.         This software is distributed with no warranty whatever.  
  17.         The author takes no responsibility for the consequences 
  18.         of its use.
  19.  
  20.         Yacc (or Bison) required to compile."  ;
  21. SEE-ALSO:     as8096.doc,frasmain.c;    
  22. AUTHORS:     Mark Zenier;
  23. COMPILERS:     Microport Sys V/AT, ATT Yacc, Turbo C V1.5, Bison (CUG disk 285)
  24.         (previous versions Xenix, Unisoft 68000 Version 7, Sun 3);
  25. */
  26. /* 8096 instruction generation file */
  27. /* November 17, 1990 */
  28.  
  29. /*
  30.     description    frame work parser description for framework cross
  31.             assemblers
  32.     history        February 2, 1988
  33.             September 11, 1990 - merge table definition
  34.             September 12, 1990 - short file names
  35.             September 14, 1990 - short variable names
  36.             September 17, 1990 - use yylex as external
  37. */
  38. #include <stdio.h>
  39. #include "frasmdat.h"
  40. #include "fragcon.h"
  41.  
  42. #define yylex lexintercept
  43.  
  44. /*    0000.0000.0000.00xx    short/long index selection */
  45. #define    ADDR        0x3
  46. #define    DIRECT        0x1
  47. #define    EXTENDED    0x2
  48. /*    0000.0000.0000.x000    80196 select */
  49. #define    CPU196        0x8
  50. #define    CPU96        0
  51. #define ST_INH 0x1
  52. #define ST_DIR1 0x2
  53. #define ST_DIR2 0x4
  54. #define ST_DIR3 0x8
  55. #define ST_IMM1 0x10
  56. #define ST_IMM2 0x20
  57. #define ST_IMM3 0x40
  58. #define ST_IND1 0x80
  59. #define ST_INC1 0x100
  60. #define ST_IND2 0x200
  61. #define ST_INC2 0x400
  62. #define ST_IND3 0x800
  63. #define ST_INC3 0x1000
  64. #define ST_INX1 0x2000
  65. #define ST_INX2 0x4000
  66. #define ST_INX3 0x8000
  67.     
  68.     int    cpuselect = CPU196;
  69.     static char    genbdef[] = "[1=];";
  70.     static char    genwdef[] = "[1=]y"; /* x for normal, y for byte rev */
  71.     char ignosyn[] = "[Xinvalid syntax for instruction";
  72.     char ignosel[] = "[Xinvalid operands/illegal instruction for cpu";
  73. /*    constants for increment bit in indirect operand */
  74. #define    AUTOINC        1
  75. #define    NOINC        0
  76.  
  77.     long    labelloc;
  78.     static int satsub;
  79.     int    ifstkpt = 0;
  80.     int    fraifskip = FALSE;
  81.  
  82.     struct symel * endsymbol = SYMNULL;
  83.  
  84. %}
  85. %union {
  86.     int    intv;
  87.     long     longv;
  88.     char    *strng;
  89.     struct symel *symb;
  90. }
  91.  
  92. %token <intv> KOC_WDEF
  93. %token <intv> KOC_BDEF
  94. %token <intv> KOC_ELSE
  95. %token <intv> KOC_END
  96. %token <intv> KOC_ENDI
  97. %token <intv> KOC_EQU
  98. %token <intv> KOC_IF
  99. %token <intv> KOC_INCLUDE
  100. %token <intv> KOC_ORG
  101. %token <intv> KOC_RESM
  102. %token <intv> KOC_SDEF
  103. %token <intv> KOC_SET
  104. %token <intv> KOC_CHSET
  105. %token <intv> KOC_CHDEF
  106. %token <intv> KOC_CHUSE
  107. %token <intv> KOC_AWRESM
  108. %token <intv> KOC_ALRESM
  109. %token <intv> KOC_ALDEF
  110. %token <intv> KOC_AWDEF
  111. %token <intv> KOC_CPU
  112. %token <intv> KOC_opcode
  113.  
  114. %token <longv> CONSTANT
  115. %token EOL
  116. %token KEOP_AND
  117. %token KEOP_DEFINED
  118. %token KEOP_EQ
  119. %token KEOP_GE
  120. %token KEOP_GT
  121. %token KEOP_HIGH
  122. %token KEOP_LE
  123. %token KEOP_LOW
  124. %token KEOP_LT
  125. %token KEOP_MOD
  126. %token KEOP_MUN
  127. %token KEOP_NE
  128. %token KEOP_NOT
  129. %token KEOP_OR
  130. %token KEOP_SHL
  131. %token KEOP_SHR
  132. %token KEOP_XOR
  133. %token KEOP_locctr
  134. %token <symb> LABEL
  135. %token <strng> STRING
  136. %token <symb> SYMBOL
  137.  
  138. %token KTK_invalid
  139.  
  140. %right    KEOP_HIGH KEOP_LOW
  141. %left    KEOP_OR KEOP_XOR
  142. %left    KEOP_AND
  143. %right    KEOP_NOT
  144. %nonassoc    KEOP_GT KEOP_GE KEOP_LE KEOP_LT KEOP_NE KEOP_EQ
  145. %left    '+' '-'
  146. %left    '*' '/' KEOP_MOD KEOP_SHL KEOP_SHR
  147. %right    KEOP_MUN
  148.  
  149.  
  150. %type <intv> expr exprlist stringlist
  151.  
  152. %start file
  153.  
  154. %%
  155.  
  156. file    :    file allline
  157.     |    allline
  158.     ;
  159.  
  160. allline    :     line EOL
  161.             {
  162.                 clrexpr();
  163.             }
  164.     |    EOL
  165.     |    error EOL
  166.             {
  167.                 clrexpr();
  168.                 yyerrok;
  169.             }
  170.     ;
  171.  
  172. line    :    LABEL KOC_END 
  173.             {
  174.                 endsymbol = $1;
  175.                 nextreadact = Nra_end;
  176.             }
  177.     |          KOC_END 
  178.             {
  179.                 nextreadact = Nra_end;
  180.             }
  181.     |    KOC_INCLUDE STRING
  182.             {
  183.         if(nextfstk >= FILESTKDPTH)
  184.         {
  185.             fraerror("include file nesting limit exceeded");
  186.         }
  187.         else
  188.         {
  189.             infilestk[nextfstk].fnm = savestring($2,strlen($2));
  190.             if( (infilestk[nextfstk].fpt = fopen($2,"r"))
  191.                 ==(FILE *)NULL )
  192.             {
  193.                 fraerror("cannot open include file");
  194.             }
  195.             else
  196.             {
  197.                 nextreadact = Nra_new;
  198.             }
  199.         }
  200.             }
  201.     |    LABEL KOC_EQU expr 
  202.             {
  203.                 if($1 -> seg == SSG_UNDEF)
  204.                 {
  205.                     pevalexpr(0, $3);
  206.                     if(evalr[0].seg == SSG_ABS)
  207.                     {
  208.                         $1 -> seg = SSG_EQU;
  209.                         $1 -> value = evalr[0].value;
  210.                         prtequvalue("C: 0x%lx\n",
  211.                             evalr[0].value);
  212.                     }
  213.                     else
  214.                     {
  215.                         fraerror(
  216.                     "noncomputable expression for EQU");
  217.                     }
  218.                 }
  219.                 else
  220.                 {
  221.                     fraerror(
  222.                 "cannot change symbol value with EQU");
  223.                 }
  224.             }
  225.     |    LABEL KOC_SET expr 
  226.             {
  227.                 if($1 -> seg == SSG_UNDEF
  228.                    || $1 -> seg == SSG_SET)
  229.                 {
  230.                     pevalexpr(0, $3);
  231.                     if(evalr[0].seg == SSG_ABS)
  232.                     {
  233.                         $1 -> seg = SSG_SET;
  234.                         $1 -> value = evalr[0].value;
  235.                         prtequvalue("C: 0x%lx\n",
  236.                             evalr[0].value);
  237.                     }
  238.                     else
  239.                     {
  240.                         fraerror(
  241.                     "noncomputable expression for SET");
  242.                     }
  243.                 }
  244.                 else
  245.                 {
  246.                     fraerror(
  247.                 "cannot change symbol value with SET");
  248.                 }
  249.             }
  250.     |    KOC_IF expr 
  251.             {
  252.         if((++ifstkpt) < IFSTKDEPTH)
  253.         {
  254.             pevalexpr(0, $2);
  255.             if(evalr[0].seg == SSG_ABS)
  256.             {
  257.                 if(evalr[0].value != 0)
  258.                 {
  259.                     elseifstk[ifstkpt] = If_Skip;
  260.                     endifstk[ifstkpt] = If_Active;
  261.                 }
  262.                 else
  263.                 {
  264.                     fraifskip = TRUE;
  265.                     elseifstk[ifstkpt] = If_Active;
  266.                     endifstk[ifstkpt] = If_Active;
  267.                 }
  268.             }
  269.             else
  270.             {
  271.                 fraifskip = TRUE;
  272.                 elseifstk[ifstkpt] = If_Active;
  273.                 endifstk[ifstkpt] = If_Active;
  274.             }
  275.         }
  276.         else
  277.         {
  278.             fraerror("IF stack overflow");
  279.         }
  280.             }
  281.                         
  282.     |    KOC_IF 
  283.             {
  284.         if(fraifskip) 
  285.         {
  286.             if((++ifstkpt) < IFSTKDEPTH)
  287.             {
  288.                     elseifstk[ifstkpt] = If_Skip;
  289.                     endifstk[ifstkpt] = If_Skip;
  290.             }
  291.             else
  292.             {
  293.                 fraerror("IF stack overflow");
  294.             }
  295.         }
  296.         else
  297.         {
  298.             yyerror("syntax error");
  299.             YYERROR;
  300.         }
  301.                 }
  302.                         
  303.     |    KOC_ELSE 
  304.             {
  305.                 switch(elseifstk[ifstkpt])
  306.                 {
  307.                 case If_Active:
  308.                     fraifskip = FALSE;
  309.                     break;
  310.                 
  311.                 case If_Skip:
  312.                     fraifskip = TRUE;
  313.                     break;
  314.                 
  315.                 case If_Err:
  316.                     fraerror("ELSE with no matching if");
  317.                     break;
  318.                 }
  319.             }
  320.  
  321.     |    KOC_ENDI 
  322.             {
  323.                 switch(endifstk[ifstkpt])
  324.                 {
  325.                 case If_Active:
  326.                     fraifskip = FALSE;
  327.                     ifstkpt--;
  328.                     break;
  329.                 
  330.                 case If_Skip:
  331.                     fraifskip = TRUE;
  332.                     ifstkpt--;
  333.                     break;
  334.                 
  335.                 case If_Err:
  336.                     fraerror("ENDI with no matching if");
  337.                     break;
  338.                 }
  339.             }
  340.     |    LABEL KOC_ORG expr 
  341.             {
  342.                 pevalexpr(0, $3);
  343.                 if(evalr[0].seg == SSG_ABS)
  344.                 {
  345.                     locctr = labelloc = evalr[0].value;
  346.                     if($1 -> seg == SSG_UNDEF)
  347.                     {
  348.                         $1 -> seg = SSG_ABS;
  349.                         $1 -> value = labelloc;
  350.                     }
  351.                     else
  352.                         fraerror(
  353.                         "multiple definition of label");
  354.                     prtequvalue("C: 0x%lx\n",
  355.                         evalr[0].value);
  356.                 }
  357.                 else
  358.                 {
  359.                     fraerror(
  360.                      "noncomputable expression for ORG");
  361.                 }
  362.             }
  363.     |          KOC_ORG expr 
  364.             {
  365.                 pevalexpr(0, $2);
  366.                 if(evalr[0].seg == SSG_ABS)
  367.                 {
  368.                     locctr = labelloc = evalr[0].value;
  369.                     prtequvalue("C: 0x%lx\n",
  370.                         evalr[0].value);
  371.                 }
  372.                 else
  373.                 {
  374.                     fraerror(
  375.                      "noncomputable expression for ORG");
  376.                 }
  377.             }
  378.     |    LABEL KOC_CHSET
  379.             {
  380.                 if($1 -> seg == SSG_UNDEF)
  381.                 {
  382.                     $1 -> seg = SSG_EQU;
  383.                     if( ($1->value = chtcreate()) <= 0)
  384.                     {
  385.         fraerror( "cannot create character translation table");
  386.                     }
  387.                     prtequvalue("C: 0x%lx\n", $1 -> value);
  388.                 }
  389.                 else
  390.                 {
  391.             fraerror( "multiple definition of label");
  392.                 }
  393.             }
  394.     |        KOC_CHUSE
  395.             {
  396.                 chtcpoint = (int *) NULL;
  397.                 prtequvalue("C: 0x%lx\n", 0L);
  398.             }
  399.     |        KOC_CHUSE expr
  400.             {
  401.                 pevalexpr(0, $2);
  402.                 if( evalr[0].seg == SSG_ABS)
  403.                 {
  404.                     if( evalr[0].value == 0)
  405.                     {
  406.                         chtcpoint = (int *)NULL;
  407.                         prtequvalue("C: 0x%lx\n", 0L);
  408.                     }
  409.                     else if(evalr[0].value < chtnxalph)
  410.                     {
  411.                 chtcpoint = chtatab[evalr[0].value];
  412.                 prtequvalue("C: 0x%lx\n", evalr[0].value);
  413.                     }
  414.                     else
  415.                     {
  416.             fraerror("nonexistent character translation table");
  417.                     }
  418.                 }
  419.                 else
  420.                 {
  421.                     fraerror("noncomputable expression");
  422.                 }
  423.             }
  424.     |        KOC_CHDEF STRING ',' exprlist
  425.             {
  426.         int findrv, numret, *charaddr;
  427.         char *sourcestr = $2, *before;
  428.  
  429.         if(chtnpoint != (int *)NULL)
  430.         {
  431.             for(satsub = 0; satsub < $4; satsub++)
  432.             {
  433.                 before = sourcestr;
  434.  
  435.                 pevalexpr(0, exprlist[satsub]);
  436.                 findrv = chtcfind(chtnpoint, &sourcestr,
  437.                         &charaddr, &numret);
  438.                 if(findrv == CF_END)
  439.                 {
  440.             fraerror("more expressions than characters");
  441.                     break;
  442.                 }
  443.  
  444.                 if(evalr[0].seg == SSG_ABS)
  445.                 {
  446.                     switch(findrv)
  447.                     {
  448.                     case CF_UNDEF:
  449.                         {
  450.                 if(evalr[0].value < 0 ||
  451.                     evalr[0].value > 255)
  452.                 {
  453.             frawarn("character translation value truncated");
  454.                 }
  455.                 *charaddr = evalr[0].value & 0xff;
  456.                 prtequvalue("C: 0x%lx\n", evalr[0].value);
  457.                         }
  458.                         break;
  459.  
  460.                     case CF_INVALID:
  461.                     case CF_NUMBER:
  462.                 fracherror("invalid character to define", 
  463.                     before, sourcestr);
  464.                         break;
  465.  
  466.                     case CF_CHAR:
  467.                 fracherror("character already defined", 
  468.                     before, sourcestr);
  469.                         break;
  470.                     }
  471.                 }
  472.                 else
  473.                 {
  474.                     fraerror("noncomputable expression");
  475.                 }
  476.             }
  477.  
  478.             if( *sourcestr != '\0')
  479.             {
  480.                 fraerror("more characters than expressions");
  481.             }
  482.         }
  483.         else
  484.         {
  485.             fraerror("no CHARSET statement active");
  486.         }
  487.             
  488.             }
  489.     |    LABEL 
  490.             {
  491.             if($1 -> seg == SSG_UNDEF)
  492.             {
  493.                 $1 -> seg = SSG_ABS;
  494.                 $1 -> value = labelloc;
  495.                 prtequvalue("C: 0x%lx\n", labelloc);
  496.  
  497.             }
  498.             else
  499.                 fraerror(
  500.                 "multiple definition of label");
  501.             }
  502.     |    labeledline
  503.     ;
  504.  
  505. labeledline :    LABEL genline
  506.             {
  507.             if($1 -> seg == SSG_UNDEF)
  508.             {
  509.                 $1 -> seg = SSG_ABS;
  510.                 $1 -> value = labelloc;
  511.             }
  512.             else
  513.                 fraerror(
  514.                 "multiple definition of label");
  515.             labelloc = locctr;
  516.             }
  517.                 
  518.     |    genline
  519.             {
  520.                 labelloc = locctr;
  521.             }
  522.     ;
  523.  
  524. genline    :    KOC_BDEF    exprlist 
  525.             {
  526.                 genlocrec(currseg, labelloc);
  527.                 for( satsub = 0; satsub < $2; satsub++)
  528.                 {
  529.                     pevalexpr(1, exprlist[satsub]);
  530.                     locctr += geninstr(genbdef);
  531.                 }
  532.             }
  533.     |    KOC_SDEF stringlist 
  534.             {
  535.                 genlocrec(currseg, labelloc);
  536.                 for(satsub = 0; satsub < $2; satsub++)
  537.                 {
  538.                     locctr += genstring(stringlist[satsub]);
  539.                 }
  540.             }
  541.     |    KOC_WDEF exprlist 
  542.             {
  543.                 genlocrec(currseg, labelloc);
  544.                 for( satsub = 0; satsub < $2; satsub++)
  545.                 {
  546.                     pevalexpr(1, exprlist[satsub]);
  547.                     locctr += geninstr(genwdef);
  548.                 }
  549.             }    
  550.     |    KOC_RESM expr 
  551.             {
  552.                 pevalexpr(0, $2);
  553.                 if(evalr[0].seg == SSG_ABS)
  554.                 {
  555.                     locctr = labelloc + evalr[0].value;
  556.                     prtequvalue("C: 0x%lx\n", labelloc);
  557.                 }
  558.                 else
  559.                 {
  560.                     fraerror(
  561.                  "noncomputable result for RMB expression");
  562.                 }
  563.             }
  564.     ;
  565.  
  566. exprlist :    exprlist ',' expr
  567.             {
  568.                 exprlist[nextexprs ++ ] = $3;
  569.                 $$ = nextexprs;
  570.             }
  571.     |    expr
  572.             {
  573.                 nextexprs = 0;
  574.                 exprlist[nextexprs ++ ] = $1;
  575.                 $$ = nextexprs;
  576.             }
  577.     ;
  578.  
  579. stringlist :    stringlist ',' STRING
  580.             {
  581.                 stringlist[nextstrs ++ ] = $3;
  582.                 $$ = nextstrs;
  583.             }
  584.     |    STRING
  585.             {
  586.                 nextstrs = 0;
  587.                 stringlist[nextstrs ++ ] = $1;
  588.                 $$ = nextstrs;
  589.             }
  590.     ;
  591.  
  592.  
  593. genline :    KOC_AWRESM expr 
  594.             {
  595.                 while(labelloc & 1)
  596.                 {
  597.                     labelloc += 1;
  598.                 }
  599.  
  600.                 pevalexpr(0, $2);
  601.                 if(evalr[0].seg == SSG_ABS)
  602.                 {
  603.                     locctr = labelloc + (2*evalr[0].value);
  604.                     prtequvalue("C: 0x%lx\n", labelloc);
  605.                 }
  606.                 else
  607.                 {
  608.                     fraerror(
  609.                  "noncomputable result for RMB expression");
  610.                 }
  611.             }
  612.     ;
  613. genline :    KOC_ALRESM expr 
  614.             {
  615.                 while(labelloc & 3)
  616.                 {
  617.                     labelloc += 1;
  618.                 }
  619.  
  620.                 pevalexpr(0, $2);
  621.                 if(evalr[0].seg == SSG_ABS)
  622.                 {
  623.                     locctr = labelloc + (4*evalr[0].value);
  624.                     prtequvalue("C: 0x%lx\n", labelloc);
  625.                 }
  626.                 else
  627.                 {
  628.                     fraerror(
  629.                  "noncomputable result for RMB expression");
  630.                 }
  631.             }
  632.     ;
  633. genline :    KOC_ALDEF exprlist 
  634.             {
  635.                 while(labelloc & 3)
  636.                 {
  637.                     labelloc = (locctr += 1);
  638.                 }
  639.  
  640.                 genlocrec(currseg, labelloc);
  641.                 for( satsub = 0; satsub < $2; satsub++)
  642.                 {
  643.                     pevalexpr(1, exprlist[satsub]);
  644.                     locctr += geninstr(
  645.                         "[1=]~.ffff&y!.10}y");
  646.                 }
  647.             }    
  648.     ;
  649. genline :    KOC_AWDEF exprlist 
  650.             {
  651.                 if(labelloc & 1)
  652.                 {
  653.                     labelloc = (locctr += 1);
  654.                 }
  655.  
  656.                 genlocrec(currseg, labelloc);
  657.                 for( satsub = 0; satsub < $2; satsub++)
  658.                 {
  659.                     pevalexpr(1, exprlist[satsub]);
  660.                     locctr += geninstr(genwdef);
  661.                 }
  662.             }    
  663.     ;
  664. line    :    KOC_CPU STRING
  665.             {
  666.         if( ! cpumatch($2))
  667.         {
  668.             fraerror("unknown cpu type, 80196 assumed");
  669.             cpuselect = CPU196;
  670.         }
  671.             }
  672.     ;
  673. genline : KOC_opcode 
  674.             {
  675.         genlocrec(currseg, labelloc);
  676.         locctr += geninstr(findgen($1, ST_INH, cpuselect));
  677.             }
  678.     ;
  679. genline : KOC_opcode  expr
  680.             {
  681.         genlocrec(currseg, labelloc);
  682.         pevalexpr(1,$2);
  683.         locctr += geninstr(findgen($1, ST_DIR1, cpuselect
  684.                  + ( (evalr[1].seg == SSG_ABS 
  685.                 && evalr[1].value >= 0
  686.                 && evalr[1].value <= 255 )
  687.                 ? DIRECT : EXTENDED ) ) );
  688.             }
  689.     ;
  690. genline : KOC_opcode  expr ',' expr
  691.             {
  692.         genlocrec(currseg, labelloc);
  693.         pevalexpr(1,$2);
  694.         pevalexpr(2,$4);
  695.         locctr += geninstr(findgen($1, ST_DIR2, cpuselect
  696.                  + ( (evalr[2].seg == SSG_ABS 
  697.                 && evalr[2].value >= 0
  698.                 && evalr[2].value <= 255 )
  699.                 ? DIRECT : EXTENDED ) ) );
  700.             }
  701.     ;
  702. genline : KOC_opcode  expr ',' expr ',' expr
  703.             {
  704.         genlocrec(currseg, labelloc);
  705.         pevalexpr(1,$2);
  706.         pevalexpr(2,$4);
  707.         pevalexpr(3,$6);
  708.         locctr += geninstr(findgen($1, ST_DIR3, cpuselect
  709.                  + ( (evalr[3].seg == SSG_ABS 
  710.                 && evalr[3].value >= 0
  711.                 && evalr[3].value <= 255 )
  712.                 ? DIRECT : EXTENDED ) ) );
  713.             }
  714.     ;
  715. genline : KOC_opcode  '#' expr
  716.             {
  717.         genlocrec(currseg, labelloc);
  718.         pevalexpr(1,$3);
  719.         locctr += geninstr(findgen($1, ST_IMM1, cpuselect));
  720.             }
  721.     ;
  722. genline : KOC_opcode  expr ',' '#' expr
  723.             {
  724.         genlocrec(currseg, labelloc);
  725.         pevalexpr(1,$2);
  726.         pevalexpr(2,$5);
  727.         locctr += geninstr(findgen($1, ST_IMM2, cpuselect));
  728.             }
  729.     ;
  730. genline : KOC_opcode  expr ',' expr ',' '#' expr
  731.             {
  732.         genlocrec(currseg, labelloc);
  733.         pevalexpr(1,$2);
  734.         pevalexpr(2,$4);
  735.         pevalexpr(3,$7);
  736.         locctr += geninstr(findgen($1, ST_IMM3, cpuselect));
  737.             }
  738.     ;
  739. genline : KOC_opcode  '[' expr ']'
  740.             {
  741.         genlocrec(currseg, labelloc);
  742.         pevalexpr(1,$3);
  743.         evalr[2].value = NOINC;
  744.         locctr += geninstr(findgen($1, ST_IND1, cpuselect));
  745.             }
  746.     ;
  747. genline : KOC_opcode  '[' expr ']' '+'
  748.             {
  749.         genlocrec(currseg, labelloc);
  750.         pevalexpr(1,$3);
  751.         evalr[2].value = AUTOINC;
  752.         locctr += geninstr(findgen($1, ST_IND1, cpuselect));
  753.             }
  754.     ;
  755. genline : KOC_opcode  expr ',' '[' expr ']'
  756.             {
  757.         genlocrec(currseg, labelloc);
  758.         pevalexpr(1,$2);
  759.         pevalexpr(2,$5);
  760.         evalr[3].value = NOINC;
  761.         locctr += geninstr(findgen($1, ST_IND2, cpuselect));
  762.             }
  763.     ;
  764. genline : KOC_opcode  expr ',' '[' expr ']' '+'
  765.             {
  766.         genlocrec(currseg, labelloc);
  767.         pevalexpr(1,$2);
  768.         pevalexpr(2,$5);
  769.         evalr[3].value = AUTOINC;
  770.         locctr += geninstr(findgen($1, ST_IND2, cpuselect));
  771.             }
  772.     ;
  773. genline : KOC_opcode  expr ',' expr ',' '[' expr ']'
  774.             {
  775.         genlocrec(currseg, labelloc);
  776.         pevalexpr(1,$2);
  777.         pevalexpr(2,$4);
  778.         pevalexpr(3,$7);
  779.         evalr[4].value = NOINC;
  780.         locctr += geninstr(findgen($1, ST_IND3, cpuselect));
  781.             }
  782.     ;
  783. genline : KOC_opcode  expr ',' expr ',' '[' expr ']' '+'
  784.             {
  785.         genlocrec(currseg, labelloc);
  786.         pevalexpr(1,$2);
  787.         pevalexpr(2,$4);
  788.         pevalexpr(3,$7);
  789.         evalr[4].value = AUTOINC;
  790.         locctr += geninstr(findgen($1, ST_IND3, cpuselect));
  791.             }
  792.     ;
  793. genline : KOC_opcode  expr '[' expr ']'
  794.             {
  795.         genlocrec(currseg, labelloc);
  796.         pevalexpr(1,$2);
  797.         pevalexpr(2,$4);
  798.         locctr += geninstr(findgen($1, ST_INX1, cpuselect
  799.                  + ( (evalr[1].seg == SSG_ABS 
  800.                 && evalr[1].value >= -128
  801.                 && evalr[1].value <= 127 )
  802.                 ? DIRECT : EXTENDED ) ) );
  803.             }
  804.     ;
  805. genline : KOC_opcode  expr ',' expr '[' expr ']'
  806.             {
  807.         genlocrec(currseg, labelloc);
  808.         pevalexpr(1,$2);
  809.         pevalexpr(2,$4);
  810.         pevalexpr(3,$6);
  811.         locctr += geninstr(findgen($1, ST_INX2, cpuselect
  812.                  + ( (evalr[2].seg == SSG_ABS 
  813.                 && evalr[2].value >= -128
  814.                 && evalr[2].value <= 127 )
  815.                 ? DIRECT : EXTENDED ) ) );
  816.             }
  817.     ;
  818. genline : KOC_opcode  expr ',' expr ',' expr '[' expr ']'
  819.             {
  820.         genlocrec(currseg, labelloc);
  821.         pevalexpr(1,$2);
  822.         pevalexpr(2,$4);
  823.         pevalexpr(3,$6);
  824.         pevalexpr(4,$8);
  825.         locctr += geninstr(findgen($1, ST_INX3, cpuselect
  826.                  + ( (evalr[3].seg == SSG_ABS 
  827.                 && evalr[3].value >= -128
  828.                 && evalr[3].value <= 127 )
  829.                 ? DIRECT : EXTENDED ) ) );
  830.             }
  831.     ;
  832. expr    :    '+' expr %prec KEOP_MUN
  833.             {
  834.                 $$ = $2;
  835.             }
  836.     |    '-' expr %prec KEOP_MUN
  837.             {
  838.                 $$ = exprnode(PCCASE_UN,$2,IFC_NEG,0,0L,
  839.                     SYMNULL);
  840.             }
  841.     |    KEOP_NOT expr
  842.             {
  843.                 $$ = exprnode(PCCASE_UN,$2,IFC_NOT,0,0L,
  844.                     SYMNULL);
  845.             }
  846.     |    KEOP_HIGH expr
  847.             {
  848.                 $$ = exprnode(PCCASE_UN,$2,IFC_HIGH,0,0L,
  849.                     SYMNULL);
  850.             }
  851.     |    KEOP_LOW expr
  852.             {
  853.                 $$ = exprnode(PCCASE_UN,$2,IFC_LOW,0,0L,
  854.                     SYMNULL);
  855.             }
  856.     |    expr '*' expr
  857.             {
  858.                 $$ = exprnode(PCCASE_BIN,$1,IFC_MUL,$3,0L,
  859.                     SYMNULL);
  860.             }
  861.     |    expr '/' expr
  862.             {
  863.                 $$ = exprnode(PCCASE_BIN,$1,IFC_DIV,$3,0L,
  864.                     SYMNULL);
  865.             }
  866.     |    expr '+' expr
  867.             {
  868.                 $$ = exprnode(PCCASE_BIN,$1,IFC_ADD,$3,0L,
  869.                     SYMNULL);
  870.             }
  871.     |    expr '-' expr
  872.             {
  873.                 $$ = exprnode(PCCASE_BIN,$1,IFC_SUB,$3,0L,
  874.                     SYMNULL);
  875.             }
  876.     |    expr KEOP_MOD expr
  877.             {
  878.                 $$ = exprnode(PCCASE_BIN,$1,IFC_MOD,$3,0L,
  879.                     SYMNULL);
  880.             }
  881.     |    expr KEOP_SHL expr
  882.             {
  883.                 $$ = exprnode(PCCASE_BIN,$1,IFC_SHL,$3,0L,
  884.                     SYMNULL);
  885.             }
  886.     |    expr KEOP_SHR expr
  887.             {
  888.                 $$ = exprnode(PCCASE_BIN,$1,IFC_SHR,$3,0L,
  889.                     SYMNULL);
  890.             }
  891.     |    expr KEOP_GT expr
  892.             {
  893.                 $$ = exprnode(PCCASE_BIN,$1,IFC_GT,$3,0L,
  894.                     SYMNULL);
  895.             }
  896.     |    expr KEOP_GE expr
  897.             {
  898.                 $$ = exprnode(PCCASE_BIN,$1,IFC_GE,$3,0L,
  899.                     SYMNULL);
  900.             }
  901.     |    expr KEOP_LT expr
  902.             {
  903.                 $$ = exprnode(PCCASE_BIN,$1,IFC_LT,$3,0L,
  904.                     SYMNULL);
  905.             }
  906.     |    expr KEOP_LE expr
  907.             {
  908.                 $$ = exprnode(PCCASE_BIN,$1,IFC_LE,$3,0L,
  909.                     SYMNULL);
  910.             }
  911.     |    expr KEOP_NE expr
  912.             {
  913.                 $$ = exprnode(PCCASE_BIN,$1,IFC_NE,$3,0L,
  914.                     SYMNULL);
  915.             }
  916.     |    expr KEOP_EQ expr
  917.             {
  918.                 $$ = exprnode(PCCASE_BIN,$1,IFC_EQ,$3,0L,
  919.                     SYMNULL);
  920.             }
  921.     |    expr KEOP_AND expr
  922.             {
  923.                 $$ = exprnode(PCCASE_BIN,$1,IFC_AND,$3,0L,
  924.                     SYMNULL);
  925.             }
  926.     |    expr KEOP_OR expr
  927.             {
  928.                 $$ = exprnode(PCCASE_BIN,$1,IFC_OR,$3,0L,
  929.                     SYMNULL);
  930.             }
  931.     |    expr KEOP_XOR expr
  932.             {
  933.                 $$ = exprnode(PCCASE_BIN,$1,IFC_XOR,$3,0L,
  934.                     SYMNULL);
  935.             }
  936.     |    KEOP_DEFINED SYMBOL
  937.             {
  938.                 $$ = exprnode(PCCASE_DEF,0,IGP_DEFINED,0,0L,$2);
  939.             }
  940.     |    SYMBOL
  941.             {
  942.                 $$ = exprnode(PCCASE_SYMB,0,IFC_SYMB,0,0L,$1);
  943.             }
  944.     |    '*'
  945.             {
  946.                 $$ = exprnode(PCCASE_PROGC,0,IFC_PROGCTR,0,
  947.                     labelloc, SYMNULL);
  948.             }
  949.     |    CONSTANT
  950.             {
  951.                 $$ = exprnode(PCCASE_CONS,0,IGP_CONSTANT,0,$1,
  952.                     SYMNULL);
  953.             }
  954.     |    STRING
  955.             {
  956.                 char *sourcestr = $1;
  957.                 long accval = 0;
  958.  
  959.                 if(strlen($1) > 0)
  960.                 {
  961.                     accval = chtran(&sourcestr);
  962.                     if(*sourcestr != '\0')
  963.                     {
  964.                         accval = (accval << 8) +
  965.                             chtran(&sourcestr);
  966.                     }
  967.  
  968.                     if( *sourcestr != '\0')
  969.                     {
  970.     frawarn("string constant in expression more than 2 characters long");
  971.                     }
  972.                 }
  973.                 $$ = exprnode(PCCASE_CONS, 0, IGP_CONSTANT, 0,
  974.                     accval, SYMNULL);
  975.             }
  976.     |    '(' expr ')'
  977.             {
  978.                 $$ = $2;
  979.             }
  980.     ;
  981.  
  982.  
  983.  
  984. %%
  985.  
  986. lexintercept()
  987. /*
  988.     description    intercept the call to yylex (the lexical analyzer)
  989.             and filter out all unnecessary tokens when skipping
  990.             the input between a failed IF and its matching ENDI or
  991.             ELSE
  992.     globals     fraifskip    the enable flag
  993. */
  994. {
  995. #undef yylex
  996.  
  997.     int rv;
  998.  
  999.     if(fraifskip)
  1000.     {
  1001.         for(;;)
  1002.         {
  1003.  
  1004.             switch(rv = yylex())
  1005.  
  1006.             {
  1007.             case 0:
  1008.             case KOC_END:
  1009.             case KOC_IF:
  1010.             case KOC_ELSE:
  1011.             case KOC_ENDI:
  1012.             case EOL:
  1013.                 return rv;
  1014.             default:
  1015.                 break;
  1016.             }
  1017.         }
  1018.     }
  1019.     else
  1020.         return yylex();
  1021. #define yylex lexintercept
  1022. }
  1023.  
  1024.  
  1025.  
  1026. setreserved()
  1027. {
  1028.  
  1029.     reservedsym("and", KEOP_AND, 0);
  1030.     reservedsym("defined", KEOP_DEFINED,0);
  1031.     reservedsym("eq", KEOP_EQ, 0);
  1032.     reservedsym("ge", KEOP_GE, 0);
  1033.     reservedsym("gt", KEOP_GT, 0);
  1034.     reservedsym("high", KEOP_HIGH, 0);
  1035.     reservedsym("le", KEOP_LE, 0);
  1036.     reservedsym("low", KEOP_LOW, 0);
  1037.     reservedsym("lt", KEOP_LT, 0);
  1038.     reservedsym("mod", KEOP_MOD, 0);
  1039.     reservedsym("ne", KEOP_NE, 0);
  1040.     reservedsym("not", KEOP_NOT, 0);
  1041.     reservedsym("or", KEOP_OR, 0);
  1042.     reservedsym("shl", KEOP_SHL, 0);
  1043.     reservedsym("shr", KEOP_SHR, 0);
  1044.     reservedsym("xor", KEOP_XOR, 0);
  1045.     reservedsym("AND", KEOP_AND, 0);
  1046.     reservedsym("DEFINED", KEOP_DEFINED,0);
  1047.     reservedsym("EQ", KEOP_EQ, 0);
  1048.     reservedsym("GE", KEOP_GE, 0);
  1049.     reservedsym("GT", KEOP_GT, 0);
  1050.     reservedsym("HIGH", KEOP_HIGH, 0);
  1051.     reservedsym("LE", KEOP_LE, 0);
  1052.     reservedsym("LOW", KEOP_LOW, 0);
  1053.     reservedsym("LT", KEOP_LT, 0);
  1054.     reservedsym("MOD", KEOP_MOD, 0);
  1055.     reservedsym("NE", KEOP_NE, 0);
  1056.     reservedsym("NOT", KEOP_NOT, 0);
  1057.     reservedsym("OR", KEOP_OR, 0);
  1058.     reservedsym("SHL", KEOP_SHL, 0);
  1059.     reservedsym("SHR", KEOP_SHR, 0);
  1060.     reservedsym("XOR", KEOP_XOR, 0);
  1061.  
  1062. }
  1063. cpumatch(str)
  1064.     char * str;
  1065. {
  1066.     int msub;
  1067.  
  1068.     static struct
  1069.     {
  1070.         char * mtch;
  1071.         int   cpuv;
  1072.     } matchtab[] =
  1073.     {
  1074.         {"19", CPU196 },
  1075.         {"9", CPU96 },
  1076.         {"", 0} 
  1077.     };
  1078.  
  1079.     for(msub = 0; matchtab[msub].mtch[0] != '\0'; msub++)
  1080.     {
  1081.         if(strcontains(str, matchtab[msub].mtch))
  1082.         {
  1083.             cpuselect = matchtab[msub].cpuv;
  1084.             return TRUE;
  1085.         }
  1086.     }
  1087.  
  1088.     return FALSE;
  1089. }
  1090.  
  1091.  
  1092. strcontains(s1, sm)
  1093.     char * s1, *sm;
  1094. {
  1095.     int l1 = strlen(s1), lm = strlen(sm);
  1096.  
  1097.     for(; l1 >= lm; l1--, s1++)
  1098.     {
  1099.         if(strncmp(s1, sm, lm) == 0)
  1100.         {
  1101.             return TRUE;
  1102.         }
  1103.     }
  1104.     return FALSE;
  1105. }
  1106.  
  1107. /*
  1108.     description    Opcode and Instruction generation tables
  1109.     usage        Unix, framework crossassembler
  1110.     history        September 25, 1987
  1111. */
  1112.  
  1113. #define NUMOPCODE 125
  1114. #define NUMSYNBLK 239
  1115. #define NUMDIFFOP 323
  1116.  
  1117. int gnumopcode = NUMOPCODE;
  1118.  
  1119. int ophashlnk[NUMOPCODE];
  1120.  
  1121. struct opsym optab[NUMOPCODE+1]
  1122.     = {
  1123.     {"invalid", KOC_opcode, 2, 0 },
  1124.     {"ADD", KOC_opcode, 8, 2 },
  1125.     {"ADDB", KOC_opcode, 8, 10 },
  1126.     {"ADDC", KOC_opcode, 4, 18 },
  1127.     {"ADDCB", KOC_opcode, 4, 22 },
  1128.     {"AND", KOC_opcode, 8, 26 },
  1129.     {"ANDB", KOC_opcode, 8, 34 },
  1130.     {"BMOV", KOC_opcode, 1, 42 },
  1131.     {"BR", KOC_opcode, 1, 43 },
  1132.     {"BYTE", KOC_BDEF, 0, 0 },
  1133.     {"CHARDEF", KOC_CHDEF, 0, 0 },
  1134.     {"CHARSET", KOC_CHSET, 0, 0 },
  1135.     {"CHARUSE", KOC_CHUSE, 0, 0 },
  1136.     {"CHD", KOC_CHDEF, 0, 0 },
  1137.     {"CLR", KOC_opcode, 1, 44 },
  1138.     {"CLRB", KOC_opcode, 1, 45 },
  1139.     {"CLRC", KOC_opcode, 1, 46 },
  1140.     {"CLRVT", KOC_opcode, 1, 47 },
  1141.     {"CMP", KOC_opcode, 4, 48 },
  1142.     {"CMPB", KOC_opcode, 4, 52 },
  1143.     {"CMPL", KOC_opcode, 1, 56 },
  1144.     {"CPU", KOC_CPU, 0, 0 },
  1145.     {"DCB", KOC_BDEF, 0, 0 },
  1146.     {"DCL", KOC_ALDEF, 0, 0 },
  1147.     {"DCW", KOC_AWDEF, 0, 0 },
  1148.     {"DEC", KOC_opcode, 1, 57 },
  1149.     {"DECB", KOC_opcode, 1, 58 },
  1150.     {"DI", KOC_opcode, 1, 59 },
  1151.     {"DIV", KOC_opcode, 4, 60 },
  1152.     {"DIVB", KOC_opcode, 4, 64 },
  1153.     {"DIVU", KOC_opcode, 4, 68 },
  1154.     {"DIVUB", KOC_opcode, 4, 72 },
  1155.     {"DJNZ", KOC_opcode, 1, 76 },
  1156.     {"DJNZW", KOC_opcode, 1, 77 },
  1157.     {"DSB", KOC_RESM, 0, 0 },
  1158.     {"DSL", KOC_ALRESM, 0, 0 },
  1159.     {"DSW", KOC_AWRESM, 0, 0 },
  1160.     {"EI", KOC_opcode, 1, 78 },
  1161.     {"ELSE", KOC_ELSE, 0, 0 },
  1162.     {"END", KOC_END, 0, 0 },
  1163.     {"ENDI", KOC_ENDI, 0, 0 },
  1164.     {"EQU", KOC_EQU, 0, 0 },
  1165.     {"EXT", KOC_opcode, 1, 79 },
  1166.     {"EXTB", KOC_opcode, 1, 80 },
  1167.     {"FCB", KOC_BDEF, 0, 0 },
  1168.     {"FCC", KOC_SDEF, 0, 0 },
  1169.     {"FDB", KOC_AWDEF, 0, 0 },
  1170.     {"IDLPD", KOC_opcode, 1, 81 },
  1171.     {"IF", KOC_IF, 0, 0 },
  1172.     {"INC", KOC_opcode, 1, 82 },
  1173.     {"INCB", KOC_opcode, 1, 83 },
  1174.     {"INCL", KOC_INCLUDE, 0, 0 },
  1175.     {"INCLUDE", KOC_INCLUDE, 0, 0 },
  1176.     {"JBC", KOC_opcode, 1, 84 },
  1177.     {"JBS", KOC_opcode, 1, 85 },
  1178.     {"JC", KOC_opcode, 1, 86 },
  1179.     {"JE", KOC_opcode, 1, 87 },
  1180.     {"JGE", KOC_opcode, 1, 88 },
  1181.     {"JGT", KOC_opcode, 1, 89 },
  1182.     {"JH", KOC_opcode, 1, 90 },
  1183.     {"JLE", KOC_opcode, 1, 91 },
  1184.     {"JLT", KOC_opcode, 1, 92 },
  1185.     {"JNC", KOC_opcode, 1, 93 },
  1186.     {"JNE", KOC_opcode, 1, 94 },
  1187.     {"JNH", KOC_opcode, 1, 95 },
  1188.     {"JNST", KOC_opcode, 1, 96 },
  1189.     {"JNV", KOC_opcode, 1, 97 },
  1190.     {"JNVT", KOC_opcode, 1, 98 },
  1191.     {"JST", KOC_opcode, 1, 99 },
  1192.     {"JV", KOC_opcode, 1, 100 },
  1193.     {"JVT", KOC_opcode, 1, 101 },
  1194.     {"LCALL", KOC_opcode, 1, 102 },
  1195.     {"LD", KOC_opcode, 4, 103 },
  1196.     {"LDB", KOC_opcode, 4, 107 },
  1197.     {"LDBSE", KOC_opcode, 4, 111 },
  1198.     {"LDBZE", KOC_opcode, 4, 115 },
  1199.     {"LJMP", KOC_opcode, 1, 119 },
  1200.     {"LONG", KOC_ALDEF, 0, 0 },
  1201.     {"MUL", KOC_opcode, 8, 120 },
  1202.     {"MULB", KOC_opcode, 8, 128 },
  1203.     {"MULU", KOC_opcode, 8, 136 },
  1204.     {"MULUB", KOC_opcode, 8, 144 },
  1205.     {"NEG", KOC_opcode, 1, 152 },
  1206.     {"NEGB", KOC_opcode, 1, 153 },
  1207.     {"NOP", KOC_opcode, 1, 154 },
  1208.     {"NORML", KOC_opcode, 1, 155 },
  1209.     {"NOT", KOC_opcode, 1, 156 },
  1210.     {"NOTB", KOC_opcode, 1, 157 },
  1211.     {"OR", KOC_opcode, 4, 158 },
  1212.     {"ORB", KOC_opcode, 4, 162 },
  1213.     {"ORG", KOC_ORG, 0, 0 },
  1214.     {"POP", KOC_opcode, 3, 166 },
  1215.     {"POPA", KOC_opcode, 1, 169 },
  1216.     {"POPF", KOC_opcode, 1, 170 },
  1217.     {"PUSH", KOC_opcode, 4, 171 },
  1218.     {"PUSHA", KOC_opcode, 1, 175 },
  1219.     {"PUSHF", KOC_opcode, 1, 176 },
  1220.     {"RESERVE", KOC_RESM, 0, 0 },
  1221.     {"RET", KOC_opcode, 1, 177 },
  1222.     {"RMB", KOC_RESM, 0, 0 },
  1223.     {"RST", KOC_opcode, 1, 178 },
  1224.     {"SCALL", KOC_opcode, 1, 179 },
  1225.     {"SET", KOC_SET, 0, 0 },
  1226.     {"SETC", KOC_opcode, 1, 180 },
  1227.     {"SHL", KOC_opcode, 2, 181 },
  1228.     {"SHLB", KOC_opcode, 2, 183 },
  1229.     {"SHLL", KOC_opcode, 2, 185 },
  1230.     {"SHR", KOC_opcode, 2, 187 },
  1231.     {"SHRA", KOC_opcode, 2, 189 },
  1232.     {"SHRAB", KOC_opcode, 2, 191 },
  1233.     {"SHRAL", KOC_opcode, 2, 193 },
  1234.     {"SHRB", KOC_opcode, 2, 195 },
  1235.     {"SHRL", KOC_opcode, 2, 197 },
  1236.     {"SJMP", KOC_opcode, 1, 199 },
  1237.     {"SKIP", KOC_opcode, 1, 200 },
  1238.     {"ST", KOC_opcode, 3, 201 },
  1239.     {"STB", KOC_opcode, 3, 204 },
  1240.     {"STRING", KOC_SDEF, 0, 0 },
  1241.     {"SUB", KOC_opcode, 8, 207 },
  1242.     {"SUBB", KOC_opcode, 8, 215 },
  1243.     {"SUBC", KOC_opcode, 4, 223 },
  1244.     {"SUBCB", KOC_opcode, 4, 227 },
  1245.     {"WORD", KOC_AWDEF, 0, 0 },
  1246.     {"XOR", KOC_opcode, 4, 231 },
  1247.     {"XORB", KOC_opcode, 4, 235 },
  1248.     { "", 0, 0, 0 }};
  1249.  
  1250. struct opsynt ostab[NUMSYNBLK+1]
  1251.     = {
  1252. /* invalid 0 */ { 0, 1, 0 },
  1253. /* invalid 1 */ { 0xffff, 1, 1 },
  1254. /* ADD 2 */ { ST_DIR2, 2, 2 },
  1255. /* ADD 3 */ { ST_DIR3, 2, 4 },
  1256. /* ADD 4 */ { ST_IMM2, 1, 6 },
  1257. /* ADD 5 */ { ST_IMM3, 1, 7 },
  1258. /* ADD 6 */ { ST_IND2, 1, 8 },
  1259. /* ADD 7 */ { ST_IND3, 1, 9 },
  1260. /* ADD 8 */ { ST_INX2, 2, 10 },
  1261. /* ADD 9 */ { ST_INX3, 2, 12 },
  1262. /* ADDB 10 */ { ST_DIR2, 2, 14 },
  1263. /* ADDB 11 */ { ST_DIR3, 2, 16 },
  1264. /* ADDB 12 */ { ST_IMM2, 1, 18 },
  1265. /* ADDB 13 */ { ST_IMM3, 1, 19 },
  1266. /* ADDB 14 */ { ST_IND2, 1, 20 },
  1267. /* ADDB 15 */ { ST_IND3, 1, 21 },
  1268. /* ADDB 16 */ { ST_INX2, 2, 22 },
  1269. /* ADDB 17 */ { ST_INX3, 2, 24 },
  1270. /* ADDC 18 */ { ST_DIR2, 2, 26 },
  1271. /* ADDC 19 */ { ST_IMM2, 1, 28 },
  1272. /* ADDC 20 */ { ST_IND2, 1, 29 },
  1273. /* ADDC 21 */ { ST_INX2, 2, 30 },
  1274. /* ADDCB 22 */ { ST_DIR2, 2, 32 },
  1275. /* ADDCB 23 */ { ST_IMM2, 1, 34 },
  1276. /* ADDCB 24 */ { ST_IND2, 1, 35 },
  1277. /* ADDCB 25 */ { ST_INX2, 2, 36 },
  1278. /* AND 26 */ { ST_DIR2, 2, 38 },
  1279. /* AND 27 */ { ST_DIR3, 2, 40 },
  1280. /* AND 28 */ { ST_IMM2, 1, 42 },
  1281. /* AND 29 */ { ST_IMM3, 1, 43 },
  1282. /* AND 30 */ { ST_IND2, 1, 44 },
  1283. /* AND 31 */ { ST_IND3, 1, 45 },
  1284. /* AND 32 */ { ST_INX2, 2, 46 },
  1285. /* AND 33 */ { ST_INX3, 2, 48 },
  1286. /* ANDB 34 */ { ST_DIR2, 2, 50 },
  1287. /* ANDB 35 */ { ST_DIR3, 2, 52 },
  1288. /* ANDB 36 */ { ST_IMM2, 1, 54 },
  1289. /* ANDB 37 */ { ST_IMM3, 1, 55 },
  1290. /* ANDB 38 */ { ST_IND2, 1, 56 },
  1291. /* ANDB 39 */ { ST_IND3, 1, 57 },
  1292. /* ANDB 40 */ { ST_INX2, 2, 58 },
  1293. /* ANDB 41 */ { ST_INX3, 2, 60 },
  1294. /* BMOV 42 */ { ST_DIR2, 1, 62 },
  1295. /* BR 43 */ { ST_IND1, 1, 63 },
  1296. /* CLR 44 */ { ST_DIR1, 1, 64 },
  1297. /* CLRB 45 */ { ST_DIR1, 1, 65 },
  1298. /* CLRC 46 */ { ST_INH, 1, 66 },
  1299. /* CLRVT 47 */ { ST_INH, 1, 67 },
  1300. /* CMP 48 */ { ST_DIR2, 2, 68 },
  1301. /* CMP 49 */ { ST_IMM2, 1, 70 },
  1302. /* CMP 50 */ { ST_IND2, 1, 71 },
  1303. /* CMP 51 */ { ST_INX2, 2, 72 },
  1304. /* CMPB 52 */ { ST_DIR2, 2, 74 },
  1305. /* CMPB 53 */ { ST_IMM2, 1, 76 },
  1306. /* CMPB 54 */ { ST_IND2, 1, 77 },
  1307. /* CMPB 55 */ { ST_INX2, 2, 78 },
  1308. /* CMPL 56 */ { ST_DIR2, 1, 80 },
  1309. /* DEC 57 */ { ST_DIR1, 1, 81 },
  1310. /* DECB 58 */ { ST_DIR1, 1, 82 },
  1311. /* DI 59 */ { ST_INH, 1, 83 },
  1312. /* DIV 60 */ { ST_DIR2, 2, 84 },
  1313. /* DIV 61 */ { ST_IMM2, 1, 86 },
  1314. /* DIV 62 */ { ST_IND2, 1, 87 },
  1315. /* DIV 63 */ { ST_INX2, 2, 88 },
  1316. /* DIVB 64 */ { ST_DIR2, 2, 90 },
  1317. /* DIVB 65 */ { ST_IMM2, 1, 92 },
  1318. /* DIVB 66 */ { ST_IND2, 1, 93 },
  1319. /* DIVB 67 */ { ST_INX2, 2, 94 },
  1320. /* DIVU 68 */ { ST_DIR2, 2, 96 },
  1321. /* DIVU 69 */ { ST_IMM2, 1, 98 },
  1322. /* DIVU 70 */ { ST_IND2, 1, 99 },
  1323. /* DIVU 71 */ { ST_INX2, 2, 100 },
  1324. /* DIVUB 72 */ { ST_DIR2, 2, 102 },
  1325. /* DIVUB 73 */ { ST_IMM2, 1, 104 },
  1326. /* DIVUB 74 */ { ST_IND2, 1, 105 },
  1327. /* DIVUB 75 */ { ST_INX2, 2, 106 },
  1328. /* DJNZ 76 */ { ST_DIR2, 1, 108 },
  1329. /* DJNZW 77 */ { ST_DIR2, 1, 109 },
  1330. /* EI 78 */ { ST_INH, 1, 110 },
  1331. /* EXT 79 */ { ST_DIR1, 1, 111 },
  1332. /* EXTB 80 */ { ST_DIR1, 1, 112 },
  1333. /* IDLPD 81 */ { ST_IMM1, 1, 113 },
  1334. /* INC 82 */ { ST_DIR1, 1, 114 },
  1335. /* INCB 83 */ { ST_DIR1, 1, 115 },
  1336. /* JBC 84 */ { ST_DIR3, 1, 116 },
  1337. /* JBS 85 */ { ST_DIR3, 1, 117 },
  1338. /* JC 86 */ { ST_DIR1, 1, 118 },
  1339. /* JE 87 */ { ST_DIR1, 1, 119 },
  1340. /* JGE 88 */ { ST_DIR1, 1, 120 },
  1341. /* JGT 89 */ { ST_DIR1, 1, 121 },
  1342. /* JH 90 */ { ST_DIR1, 1, 122 },
  1343. /* JLE 91 */ { ST_DIR1, 1, 123 },
  1344. /* JLT 92 */ { ST_DIR1, 1, 124 },
  1345. /* JNC 93 */ { ST_DIR1, 1, 125 },
  1346. /* JNE 94 */ { ST_DIR1, 1, 126 },
  1347. /* JNH 95 */ { ST_DIR1, 1, 127 },
  1348. /* JNST 96 */ { ST_DIR1, 1, 128 },
  1349. /* JNV 97 */ { ST_DIR1, 1, 129 },
  1350. /* JNVT 98 */ { ST_DIR1, 1, 130 },
  1351. /* JST 99 */ { ST_DIR1, 1, 131 },
  1352. /* JV 100 */ { ST_DIR1, 1, 132 },
  1353. /* JVT 101 */ { ST_DIR1, 1, 133 },
  1354. /* LCALL 102 */ { ST_DIR1, 1, 134 },
  1355. /* LD 103 */ { ST_DIR2, 2, 135 },
  1356. /* LD 104 */ { ST_IMM2, 1, 137 },
  1357. /* LD 105 */ { ST_IND2, 1, 138 },
  1358. /* LD 106 */ { ST_INX2, 2, 139 },
  1359. /* LDB 107 */ { ST_DIR2, 2, 141 },
  1360. /* LDB 108 */ { ST_IMM2, 1, 143 },
  1361. /* LDB 109 */ { ST_IND2, 1, 144 },
  1362. /* LDB 110 */ { ST_INX2, 2, 145 },
  1363. /* LDBSE 111 */ { ST_DIR2, 2, 147 },
  1364. /* LDBSE 112 */ { ST_IMM2, 1, 149 },
  1365. /* LDBSE 113 */ { ST_IND2, 1, 150 },
  1366. /* LDBSE 114 */ { ST_INX2, 2, 151 },
  1367. /* LDBZE 115 */ { ST_DIR2, 2, 153 },
  1368. /* LDBZE 116 */ { ST_IMM2, 1, 155 },
  1369. /* LDBZE 117 */ { ST_IND2, 1, 156 },
  1370. /* LDBZE 118 */ { ST_INX2, 2, 157 },
  1371. /* LJMP 119 */ { ST_DIR1, 1, 159 },
  1372. /* MUL 120 */ { ST_DIR2, 2, 160 },
  1373. /* MUL 121 */ { ST_DIR3, 2, 162 },
  1374. /* MUL 122 */ { ST_IMM2, 1, 164 },
  1375. /* MUL 123 */ { ST_IMM3, 1, 165 },
  1376. /* MUL 124 */ { ST_IND2, 1, 166 },
  1377. /* MUL 125 */ { ST_IND3, 1, 167 },
  1378. /* MUL 126 */ { ST_INX2, 2, 168 },
  1379. /* MUL 127 */ { ST_INX3, 2, 170 },
  1380. /* MULB 128 */ { ST_DIR2, 2, 172 },
  1381. /* MULB 129 */ { ST_DIR3, 2, 174 },
  1382. /* MULB 130 */ { ST_IMM2, 1, 176 },
  1383. /* MULB 131 */ { ST_IMM3, 1, 177 },
  1384. /* MULB 132 */ { ST_IND2, 1, 178 },
  1385. /* MULB 133 */ { ST_IND3, 1, 179 },
  1386. /* MULB 134 */ { ST_INX2, 2, 180 },
  1387. /* MULB 135 */ { ST_INX3, 2, 182 },
  1388. /* MULU 136 */ { ST_DIR2, 2, 184 },
  1389. /* MULU 137 */ { ST_DIR3, 2, 186 },
  1390. /* MULU 138 */ { ST_IMM2, 1, 188 },
  1391. /* MULU 139 */ { ST_IMM3, 1, 189 },
  1392. /* MULU 140 */ { ST_IND2, 1, 190 },
  1393. /* MULU 141 */ { ST_IND3, 1, 191 },
  1394. /* MULU 142 */ { ST_INX2, 2, 192 },
  1395. /* MULU 143 */ { ST_INX3, 2, 194 },
  1396. /* MULUB 144 */ { ST_DIR2, 2, 196 },
  1397. /* MULUB 145 */ { ST_DIR3, 2, 198 },
  1398. /* MULUB 146 */ { ST_IMM2, 1, 200 },
  1399. /* MULUB 147 */ { ST_IMM3, 1, 201 },
  1400. /* MULUB 148 */ { ST_IND2, 1, 202 },
  1401. /* MULUB 149 */ { ST_IND3, 1, 203 },
  1402. /* MULUB 150 */ { ST_INX2, 2, 204 },
  1403. /* MULUB 151 */ { ST_INX3, 2, 206 },
  1404. /* NEG 152 */ { ST_DIR1, 1, 208 },
  1405. /* NEGB 153 */ { ST_DIR1, 1, 209 },
  1406. /* NOP 154 */ { ST_INH, 1, 210 },
  1407. /* NORML 155 */ { ST_DIR2, 1, 211 },
  1408. /* NOT 156 */ { ST_DIR1, 1, 212 },
  1409. /* NOTB 157 */ { ST_DIR1, 1, 213 },
  1410. /* OR 158 */ { ST_DIR2, 2, 214 },
  1411. /* OR 159 */ { ST_IMM2, 1, 216 },
  1412. /* OR 160 */ { ST_IND2, 1, 217 },
  1413. /* OR 161 */ { ST_INX2, 2, 218 },
  1414. /* ORB 162 */ { ST_DIR2, 2, 220 },
  1415. /* ORB 163 */ { ST_IMM2, 1, 222 },
  1416. /* ORB 164 */ { ST_IND2, 1, 223 },
  1417. /* ORB 165 */ { ST_INX2, 2, 224 },
  1418. /* POP 166 */ { ST_DIR1, 2, 226 },
  1419. /* POP 167 */ { ST_IND1, 1, 228 },
  1420. /* POP 168 */ { ST_INX1, 2, 229 },
  1421. /* POPA 169 */ { ST_INH, 1, 231 },
  1422. /* POPF 170 */ { ST_INH, 1, 232 },
  1423. /* PUSH 171 */ { ST_DIR1, 2, 233 },
  1424. /* PUSH 172 */ { ST_IMM1, 1, 235 },
  1425. /* PUSH 173 */ { ST_IND1, 1, 236 },
  1426. /* PUSH 174 */ { ST_INX1, 2, 237 },
  1427. /* PUSHA 175 */ { ST_INH, 1, 239 },
  1428. /* PUSHF 176 */ { ST_INH, 1, 240 },
  1429. /* RET 177 */ { ST_INH, 1, 241 },
  1430. /* RST 178 */ { ST_INH, 1, 242 },
  1431. /* SCALL 179 */ { ST_DIR1, 1, 243 },
  1432. /* SETC 180 */ { ST_INH, 1, 244 },
  1433. /* SHL 181 */ { ST_DIR2, 1, 245 },
  1434. /* SHL 182 */ { ST_IMM2, 1, 246 },
  1435. /* SHLB 183 */ { ST_DIR2, 1, 247 },
  1436. /* SHLB 184 */ { ST_IMM2, 1, 248 },
  1437. /* SHLL 185 */ { ST_DIR2, 1, 249 },
  1438. /* SHLL 186 */ { ST_IMM2, 1, 250 },
  1439. /* SHR 187 */ { ST_DIR2, 1, 251 },
  1440. /* SHR 188 */ { ST_IMM2, 1, 252 },
  1441. /* SHRA 189 */ { ST_DIR2, 1, 253 },
  1442. /* SHRA 190 */ { ST_IMM2, 1, 254 },
  1443. /* SHRAB 191 */ { ST_DIR2, 1, 255 },
  1444. /* SHRAB 192 */ { ST_IMM2, 1, 256 },
  1445. /* SHRAL 193 */ { ST_DIR2, 1, 257 },
  1446. /* SHRAL 194 */ { ST_IMM2, 1, 258 },
  1447. /* SHRB 195 */ { ST_DIR2, 1, 259 },
  1448. /* SHRB 196 */ { ST_IMM2, 1, 260 },
  1449. /* SHRL 197 */ { ST_DIR2, 1, 261 },
  1450. /* SHRL 198 */ { ST_IMM2, 1, 262 },
  1451. /* SJMP 199 */ { ST_DIR1, 1, 263 },
  1452. /* SKIP 200 */ { ST_DIR1, 1, 264 },
  1453. /* ST 201 */ { ST_DIR2, 2, 265 },
  1454. /* ST 202 */ { ST_IND2, 1, 267 },
  1455. /* ST 203 */ { ST_INX2, 2, 268 },
  1456. /* STB 204 */ { ST_DIR2, 2, 270 },
  1457. /* STB 205 */ { ST_IND2, 1, 272 },
  1458. /* STB 206 */ { ST_INX2, 2, 273 },
  1459. /* SUB 207 */ { ST_DIR2, 2, 275 },
  1460. /* SUB 208 */ { ST_DIR3, 2, 277 },
  1461. /* SUB 209 */ { ST_IMM2, 1, 279 },
  1462. /* SUB 210 */ { ST_IMM3, 1, 280 },
  1463. /* SUB 211 */ { ST_IND2, 1, 281 },
  1464. /* SUB 212 */ { ST_IND3, 1, 282 },
  1465. /* SUB 213 */ { ST_INX2, 2, 283 },
  1466. /* SUB 214 */ { ST_INX3, 2, 285 },
  1467. /* SUBB 215 */ { ST_DIR2, 2, 287 },
  1468. /* SUBB 216 */ { ST_DIR3, 2, 289 },
  1469. /* SUBB 217 */ { ST_IMM2, 1, 291 },
  1470. /* SUBB 218 */ { ST_IMM3, 1, 292 },
  1471. /* SUBB 219 */ { ST_IND2, 1, 293 },
  1472. /* SUBB 220 */ { ST_IND3, 1, 294 },
  1473. /* SUBB 221 */ { ST_INX2, 2, 295 },
  1474. /* SUBB 222 */ { ST_INX3, 2, 297 },
  1475. /* SUBC 223 */ { ST_DIR2, 2, 299 },
  1476. /* SUBC 224 */ { ST_IMM2, 1, 301 },
  1477. /* SUBC 225 */ { ST_IND2, 1, 302 },
  1478. /* SUBC 226 */ { ST_INX2, 2, 303 },
  1479. /* SUBCB 227 */ { ST_DIR2, 2, 305 },
  1480. /* SUBCB 228 */ { ST_IMM2, 1, 307 },
  1481. /* SUBCB 229 */ { ST_IND2, 1, 308 },
  1482. /* SUBCB 230 */ { ST_INX2, 2, 309 },
  1483. /* XOR 231 */ { ST_DIR2, 2, 311 },
  1484. /* XOR 232 */ { ST_IMM2, 1, 313 },
  1485. /* XOR 233 */ { ST_IND2, 1, 314 },
  1486. /* XOR 234 */ { ST_INX2, 2, 315 },
  1487. /* XORB 235 */ { ST_DIR2, 2, 317 },
  1488. /* XORB 236 */ { ST_IMM2, 1, 319 },
  1489. /* XORB 237 */ { ST_IND2, 1, 320 },
  1490. /* XORB 238 */ { ST_INX2, 2, 321 },
  1491.     { 0, 0, 0 } };
  1492.  
  1493. struct igel igtab[NUMDIFFOP+1]
  1494.     = {
  1495. /* invalid 0 */   { 0 , 0, 
  1496.         "[Xnullentry" },
  1497. /* invalid 1 */   { 0 , 0, 
  1498.         "[Xinvalid opcode" },
  1499. /* ADD 2 */   { ADDR , DIRECT, 
  1500.         "64;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1501. /* ADD 3 */   { ADDR , EXTENDED, 
  1502.         "67;01;[2=]~.1&T!y[1=]~.1&T!.8I;" },
  1503. /* ADD 4 */   { ADDR , DIRECT, 
  1504.         "44;[3=]~.1&T!.8I;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1505. /* ADD 5 */   { ADDR , EXTENDED, 
  1506.         "47;01;[3=]~.1&T!y[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1507. /* ADD 6 */   { 0 , 0, 
  1508.         "65;[2=]y[1=]~.1&T!.8I;" },
  1509. /* ADD 7 */   { 0 , 0, 
  1510.         "45;[3=]y[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1511. /* ADD 8 */   { 0 , 0, 
  1512.         "66;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  1513. /* ADD 9 */   { 0 , 0, 
  1514.         "46;[3=]~.1&T!.8I.[4#]|;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1515. /* ADD 10 */   { ADDR , DIRECT, 
  1516.         "67;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  1517. /* ADD 11 */   { ADDR , EXTENDED, 
  1518.         "67;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  1519. /* ADD 12 */   { ADDR , DIRECT, 
  1520.         "47;[4=]~.1&T!.8I;[3=]r[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1521. /* ADD 13 */   { ADDR , EXTENDED, 
  1522.         "47;[4=]~.1&T!.8I.1|;[3=]y[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1523. /* ADDB 14 */   { ADDR , DIRECT, 
  1524.         "74;[2=].8I;[1=].8I;" },
  1525. /* ADDB 15 */   { ADDR , EXTENDED, 
  1526.         "77;01;[2=]y[1=].8I;" },
  1527. /* ADDB 16 */   { ADDR , DIRECT, 
  1528.         "54;[3=].8I;[2=].8I;[1=].8I;" },
  1529. /* ADDB 17 */   { ADDR , EXTENDED, 
  1530.         "57;01;[3=]y[2=].8I;[1=].8I;" },
  1531. /* ADDB 18 */   { 0 , 0, 
  1532.         "75;[2=];[1=].8I;" },
  1533. /* ADDB 19 */   { 0 , 0, 
  1534.         "55;[3=];[2=].8I;[1=].8I;" },
  1535. /* ADDB 20 */   { 0 , 0, 
  1536.         "76;[2=]~.1&T!.8I.[3#]|;[1=].8I;" },
  1537. /* ADDB 21 */   { 0 , 0, 
  1538.         "56;[3=]~.1&T!.8I.[4#]|;[2=].8I;[1=].8I;" },
  1539. /* ADDB 22 */   { ADDR , DIRECT, 
  1540.         "77;[3=]~.1&T!.8I;[2=]r[1=].8I;" },
  1541. /* ADDB 23 */   { ADDR , EXTENDED, 
  1542.         "77;[3=]~.1&T!.8I.1|;[2=]y[1=].8I;" },
  1543. /* ADDB 24 */   { ADDR , DIRECT, 
  1544.         "57;[4=]~.1&T!.8I;[3=]r[2=].8I;[1=].8I;" },
  1545. /* ADDB 25 */   { ADDR , EXTENDED, 
  1546.         "57;[4=]~.1&T!.8I.1|;[3=]y[2=].8I;[1=].8I;" },
  1547. /* ADDC 26 */   { ADDR , DIRECT, 
  1548.         "a4;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1549. /* ADDC 27 */   { ADDR , EXTENDED, 
  1550.         "a7;01;[2=]~.1&T!y[1=]~.1&T!.8I;" },
  1551. /* ADDC 28 */   { 0 , 0, 
  1552.         "a5;[2=]y[1=]~.1&T!.8I;" },
  1553. /* ADDC 29 */   { 0 , 0, 
  1554.         "a6;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  1555. /* ADDC 30 */   { ADDR , DIRECT, 
  1556.         "a7;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  1557. /* ADDC 31 */   { ADDR , EXTENDED, 
  1558.         "a7;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  1559. /* ADDCB 32 */   { ADDR , DIRECT, 
  1560.         "b4;[2=].8I;[1=].8I;" },
  1561. /* ADDCB 33 */   { ADDR , EXTENDED, 
  1562.         "b7;01;[2=]y[1=].8I;" },
  1563. /* ADDCB 34 */   { 0 , 0, 
  1564.         "b5;[2=];[1=].8I;" },
  1565. /* ADDCB 35 */   { 0 , 0, 
  1566.         "b6;[2=]~.1&T!.8I.[3#]|;[1=].8I;" },
  1567. /* ADDCB 36 */   { ADDR , DIRECT, 
  1568.         "b7;[3=]~.1&T!.8I;[2=]r[1=].8I;" },
  1569. /* ADDCB 37 */   { ADDR , EXTENDED, 
  1570.         "b7;[3=]~.1&T!.8I.1|;[2=]y[1=].8I;" },
  1571. /* AND 38 */   { ADDR , DIRECT, 
  1572.         "60;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1573. /* AND 39 */   { ADDR , EXTENDED, 
  1574.         "63;01;[2=]~.1&T!y[1=]~.1&T!.8I;" },
  1575. /* AND 40 */   { ADDR , DIRECT, 
  1576.         "40;[3=]~.1&T!.8I;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1577. /* AND 41 */   { ADDR , EXTENDED, 
  1578.         "43;01;[3=]~.1&T!y[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1579. /* AND 42 */   { 0 , 0, 
  1580.         "61;[2=]y[1=]~.1&T!.8I;" },
  1581. /* AND 43 */   { 0 , 0, 
  1582.         "41;[3=]y[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1583. /* AND 44 */   { 0 , 0, 
  1584.         "62;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  1585. /* AND 45 */   { 0 , 0, 
  1586.         "42;[3=]~.1&T!.8I.[4#]|;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1587. /* AND 46 */   { ADDR , DIRECT, 
  1588.         "63;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  1589. /* AND 47 */   { ADDR , EXTENDED, 
  1590.         "63;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  1591. /* AND 48 */   { ADDR , DIRECT, 
  1592.         "43;[4=]~.1&T!.8I;[3=]r[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1593. /* AND 49 */   { ADDR , EXTENDED, 
  1594.         "43;[4=]~.1&T!.8I.1|;[3=]y[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1595. /* ANDB 50 */   { ADDR , DIRECT, 
  1596.         "70;[2=].8I;[1=].8I;" },
  1597. /* ANDB 51 */   { ADDR , EXTENDED, 
  1598.         "73;01;[2=]y[1=].8I;" },
  1599. /* ANDB 52 */   { ADDR , DIRECT, 
  1600.         "50;[3=].8I;[2=].8I;[1=].8I;" },
  1601. /* ANDB 53 */   { ADDR , EXTENDED, 
  1602.         "53;01;[3=]y[2=].8I;[1=].8I;" },
  1603. /* ANDB 54 */   { 0 , 0, 
  1604.         "71;[2=];[1=].8I;" },
  1605. /* ANDB 55 */   { 0 , 0, 
  1606.         "51;[3=];[2=].8I;[1=].8I;" },
  1607. /* ANDB 56 */   { 0 , 0, 
  1608.         "72;[2=]~.1&T!.8I.[3#]|;[1=].8I;" },
  1609. /* ANDB 57 */   { 0 , 0, 
  1610.         "52;[3=]~.1&T!.8I.[4#]|;[2=].8I;[1=].8I;" },
  1611. /* ANDB 58 */   { ADDR , DIRECT, 
  1612.         "73;[3=]~.1&T!.8I;[2=]r[1=].8I;" },
  1613. /* ANDB 59 */   { ADDR , EXTENDED, 
  1614.         "73;[3=]~.1&T!.8I.1|;[2=]y[1=].8I;" },
  1615. /* ANDB 60 */   { ADDR , DIRECT, 
  1616.         "53;[4=]~.1&T!.8I;[3=]r[2=].8I;[1=].8I;" },
  1617. /* ANDB 61 */   { ADDR , EXTENDED, 
  1618.         "53;[4=]~.1&T!.8I.1|;[3=]y[2=].8I;[1=].8I;" },
  1619. /* BMOV 62 */   { CPU196 , CPU196, 
  1620.         "c1;[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1621. /* BR 63 */   { 0 , 0, 
  1622.         "e3;[1=]~.1&T!.8I;" },
  1623. /* CLR 64 */   { 0 , 0, 
  1624.         "01;[1=]~.1&T!.8I;" },
  1625. /* CLRB 65 */   { 0 , 0, 
  1626.         "11;[1=].8I;" },
  1627. /* CLRC 66 */   { 0 , 0, 
  1628.         "f8;" },
  1629. /* CLRVT 67 */   { 0 , 0, 
  1630.         "fc;" },
  1631. /* CMP 68 */   { ADDR , DIRECT, 
  1632.         "88;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1633. /* CMP 69 */   { ADDR , EXTENDED, 
  1634.         "8b;01;[2=]~.1&T!y[1=]~.1&T!.8I;" },
  1635. /* CMP 70 */   { 0 , 0, 
  1636.         "89;[2=]y[1=]~.1&T!.8I;" },
  1637. /* CMP 71 */   { 0 , 0, 
  1638.         "8a;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  1639. /* CMP 72 */   { ADDR , DIRECT, 
  1640.         "8b;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  1641. /* CMP 73 */   { ADDR , EXTENDED, 
  1642.         "8b;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  1643. /* CMPB 74 */   { ADDR , DIRECT, 
  1644.         "98;[2=].8I;[1=].8I;" },
  1645. /* CMPB 75 */   { ADDR , EXTENDED, 
  1646.         "9b;01;[2=]y[1=].8I;" },
  1647. /* CMPB 76 */   { 0 , 0, 
  1648.         "99;[2=];[1=].8I;" },
  1649. /* CMPB 77 */   { 0 , 0, 
  1650.         "9a;[2=]~.1&T!.8I.[3#]|;[1=].8I;" },
  1651. /* CMPB 78 */   { ADDR , DIRECT, 
  1652.         "9b;[3=]~.1&T!.8I;[2=]r[1=].8I;" },
  1653. /* CMPB 79 */   { ADDR , EXTENDED, 
  1654.         "9b;[3=]~.1&T!.8I.1|;[2=]y[1=].8I;" },
  1655. /* CMPL 80 */   { CPU196 , CPU196, 
  1656.         "c5;[2=]~.3&T!.8I;[1=]~.3&T!.8I;" },
  1657. /* DEC 81 */   { 0 , 0, 
  1658.         "05;[1=]~.1&T!.8I;" },
  1659. /* DECB 82 */   { 0 , 0, 
  1660.         "15;[1=].8I;" },
  1661. /* DI 83 */   { 0 , 0, 
  1662.         "fa;" },
  1663. /* DIV 84 */   { ADDR , DIRECT, 
  1664.         "fe;8c;[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1665. /* DIV 85 */   { ADDR , EXTENDED, 
  1666.         "fe;8f;01;[2=]~.1&T!y[1=]~.3&T!.8I;" },
  1667. /* DIV 86 */   { 0 , 0, 
  1668.         "fe;8d;[2=]y[1=]~.3&T!.8I;" },
  1669. /* DIV 87 */   { 0 , 0, 
  1670.         "fe;8e;[2=]~.1&T!.8I.[3#]|;[1=]~.3&T!.8I;" },
  1671. /* DIV 88 */   { ADDR , DIRECT, 
  1672.         "fe;8f;[3=]~.1&T!.8I;[2=]r[1=]~.3&T!.8I;" },
  1673. /* DIV 89 */   { ADDR , EXTENDED, 
  1674.         "fe;8f;[3=]~.1&T!.8I.1|;[2=]y[1=]~.3&T!.8I;" },
  1675. /* DIVB 90 */   { ADDR , DIRECT, 
  1676.         "fe;9c;[2=].8I;[1=]~.1&T!.8I;" },
  1677. /* DIVB 91 */   { ADDR , EXTENDED, 
  1678.         "fe;9f;01;[2=]y[1=]~.1&T!.8I;" },
  1679. /* DIVB 92 */   { 0 , 0, 
  1680.         "fe;9d;[2=];[1=]~.1&T!.8I;" },
  1681. /* DIVB 93 */   { 0 , 0, 
  1682.         "fe;9e;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  1683. /* DIVB 94 */   { ADDR , DIRECT, 
  1684.         "fe;9f;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  1685. /* DIVB 95 */   { ADDR , EXTENDED, 
  1686.         "fe;9f;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  1687. /* DIVU 96 */   { ADDR , DIRECT, 
  1688.         "8c;[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1689. /* DIVU 97 */   { ADDR , EXTENDED, 
  1690.         "8f;01;[2=]~.1&T!y[1=]~.3&T!.8I;" },
  1691. /* DIVU 98 */   { 0 , 0, 
  1692.         "8d;[2=]y[1=]~.3&T!.8I;" },
  1693. /* DIVU 99 */   { 0 , 0, 
  1694.         "8e;[2=]~.1&T!.8I.[3#]|;[1=]~.3&T!.8I;" },
  1695. /* DIVU 100 */   { ADDR , DIRECT, 
  1696.         "8f;[3=]~.1&T!.8I;[2=]r[1=]~.3&T!.8I;" },
  1697. /* DIVU 101 */   { ADDR , EXTENDED, 
  1698.         "8f;[3=]~.1&T!.8I.1|;[2=]y[1=]~.3&T!.8I;" },
  1699. /* DIVUB 102 */   { ADDR , DIRECT, 
  1700.         "9c;[2=].8I;[1=]~.1&T!.8I;" },
  1701. /* DIVUB 103 */   { ADDR , EXTENDED, 
  1702.         "9f;01;[2=]y[1=]~.1&T!.8I;" },
  1703. /* DIVUB 104 */   { 0 , 0, 
  1704.         "9d;[2=];[1=]~.1&T!.8I;" },
  1705. /* DIVUB 105 */   { 0 , 0, 
  1706.         "9e;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  1707. /* DIVUB 106 */   { ADDR , DIRECT, 
  1708.         "9f;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  1709. /* DIVUB 107 */   { ADDR , EXTENDED, 
  1710.         "9f;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  1711. /* DJNZ 108 */   { 0 , 0, 
  1712.         "e0;[1=].8I;[2=].Q.1+-r" },
  1713. /* DJNZW 109 */   { CPU196 , CPU196, 
  1714.         "e1;[1=]~.1&T!.8I;[2=].Q.1+-r" },
  1715. /* EI 110 */   { 0 , 0, 
  1716.         "fb;" },
  1717. /* EXT 111 */   { 0 , 0, 
  1718.         "06;[1=]~.3&T!.8I;" },
  1719. /* EXTB 112 */   { 0 , 0, 
  1720.         "16;[1=]~.1&T!.8I;" },
  1721. /* IDLPD 113 */   { CPU196 , CPU196, 
  1722.         "f6;[1=];" },
  1723. /* INC 114 */   { 0 , 0, 
  1724.         "07;[1=]~.1&T!.8I;" },
  1725. /* INCB 115 */   { 0 , 0, 
  1726.         "17;[1=].8I;" },
  1727. /* JBC 116 */   { 0 , 0, 
  1728.         "[2=].3I.30|;[1=].8I;[3=].Q.1+-r" },
  1729. /* JBS 117 */   { 0 , 0, 
  1730.         "[2=].3I.38|;[1=].8I;[3=].Q.1+-r" },
  1731. /* JC 118 */   { 0 , 0, 
  1732.         "db;[1=].Q.1+-r" },
  1733. /* JE 119 */   { 0 , 0, 
  1734.         "df;[1=].Q.1+-r" },
  1735. /* JGE 120 */   { 0 , 0, 
  1736.         "d6;[1=].Q.1+-r" },
  1737. /* JGT 121 */   { 0 , 0, 
  1738.         "d2;[1=].Q.1+-r" },
  1739. /* JH 122 */   { 0 , 0, 
  1740.         "d9;[1=].Q.1+-r" },
  1741. /* JLE 123 */   { 0 , 0, 
  1742.         "da;[1=].Q.1+-r" },
  1743. /* JLT 124 */   { 0 , 0, 
  1744.         "de;[1=].Q.1+-r" },
  1745. /* JNC 125 */   { 0 , 0, 
  1746.         "d3;[1=].Q.1+-r" },
  1747. /* JNE 126 */   { 0 , 0, 
  1748.         "d7;[1=].Q.1+-r" },
  1749. /* JNH 127 */   { 0 , 0, 
  1750.         "d1;[1=].Q.1+-r" },
  1751. /* JNST 128 */   { 0 , 0, 
  1752.         "d0;[1=].Q.1+-r" },
  1753. /* JNV 129 */   { 0 , 0, 
  1754.         "d5;[1=].Q.1+-r" },
  1755. /* JNVT 130 */   { 0 , 0, 
  1756.         "d4;[1=].Q.1+-r" },
  1757. /* JST 131 */   { 0 , 0, 
  1758.         "d8;[1=].Q.1+-r" },
  1759. /* JV 132 */   { 0 , 0, 
  1760.         "dd;[1=].Q.1+-r" },
  1761. /* JVT 133 */   { 0 , 0, 
  1762.         "dc;[1=].Q.1+-r" },
  1763. /* LCALL 134 */   { 0 , 0, 
  1764.         "ef;[1=].Q.2+-.ffff&y" },
  1765. /* LD 135 */   { ADDR , DIRECT, 
  1766.         "a0;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1767. /* LD 136 */   { ADDR , EXTENDED, 
  1768.         "a3;01;[2=]~.1&T!y[1=]~.1&T!.8I;" },
  1769. /* LD 137 */   { 0 , 0, 
  1770.         "a1;[2=]y[1=]~.1&T!.8I;" },
  1771. /* LD 138 */   { 0 , 0, 
  1772.         "a2;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  1773. /* LD 139 */   { ADDR , DIRECT, 
  1774.         "a3;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  1775. /* LD 140 */   { ADDR , EXTENDED, 
  1776.         "a3;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  1777. /* LDB 141 */   { ADDR , DIRECT, 
  1778.         "b0;[2=].8I;[1=].8I;" },
  1779. /* LDB 142 */   { ADDR , EXTENDED, 
  1780.         "b3;01;[2=]y[1=].8I;" },
  1781. /* LDB 143 */   { 0 , 0, 
  1782.         "b1;[2=];[1=].8I;" },
  1783. /* LDB 144 */   { 0 , 0, 
  1784.         "b2;[2=]~.1&T!.8I.[3#]|;[1=].8I;" },
  1785. /* LDB 145 */   { ADDR , DIRECT, 
  1786.         "b3;[3=]~.1&T!.8I;[2=]r[1=].8I;" },
  1787. /* LDB 146 */   { ADDR , EXTENDED, 
  1788.         "b3;[3=]~.1&T!.8I.1|;[2=]y[1=].8I;" },
  1789. /* LDBSE 147 */   { ADDR , DIRECT, 
  1790.         "bc;[2=].8I;[1=]~.1&T!.8I;" },
  1791. /* LDBSE 148 */   { ADDR , EXTENDED, 
  1792.         "bf;01;[2=]y[1=]~.1&T!.8I;" },
  1793. /* LDBSE 149 */   { 0 , 0, 
  1794.         "bd;[2=];[1=]~.1&T!.8I;" },
  1795. /* LDBSE 150 */   { 0 , 0, 
  1796.         "be;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  1797. /* LDBSE 151 */   { ADDR , DIRECT, 
  1798.         "bf;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  1799. /* LDBSE 152 */   { ADDR , EXTENDED, 
  1800.         "bf;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  1801. /* LDBZE 153 */   { ADDR , DIRECT, 
  1802.         "ac;[2=].8I;[1=]~.1&T!.8I;" },
  1803. /* LDBZE 154 */   { ADDR , EXTENDED, 
  1804.         "af;01;[2=]y[1=]~.1&T!.8I;" },
  1805. /* LDBZE 155 */   { 0 , 0, 
  1806.         "ad;[2=];[1=]~.1&T!.8I;" },
  1807. /* LDBZE 156 */   { 0 , 0, 
  1808.         "ae;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  1809. /* LDBZE 157 */   { ADDR , DIRECT, 
  1810.         "af;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  1811. /* LDBZE 158 */   { ADDR , EXTENDED, 
  1812.         "af;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  1813. /* LJMP 159 */   { 0 , 0, 
  1814.         "e7;[1=].Q.2+-.ffff&y" },
  1815. /* MUL 160 */   { ADDR , DIRECT, 
  1816.         "fe;6c;[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1817. /* MUL 161 */   { ADDR , EXTENDED, 
  1818.         "fe;6f;01;[2=]~.1&T!y[1=]~.3&T!.8I;" },
  1819. /* MUL 162 */   { ADDR , DIRECT, 
  1820.         "fe;4c;[3=]~.1&T!.8I;[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1821. /* MUL 163 */   { ADDR , EXTENDED, 
  1822.         "fe;4f;01;[3=]~.1&T!y[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1823. /* MUL 164 */   { 0 , 0, 
  1824.         "fe;6d;[2=]y[1=]~.3&T!.8I;" },
  1825. /* MUL 165 */   { 0 , 0, 
  1826.         "fe;4d;[3=]y[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1827. /* MUL 166 */   { 0 , 0, 
  1828.         "fe;6e;[2=]~.1&T!.8I.[3#]|;[1=]~.3&T!.8I;" },
  1829. /* MUL 167 */   { 0 , 0, 
  1830.         "fe;4e;[3=]~.1&T!.8I.[4#]|;[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1831. /* MUL 168 */   { ADDR , DIRECT, 
  1832.         "fe;6f;[3=]~.1&T!.8I;[2=]r[1=]~.3&T!.8I;" },
  1833. /* MUL 169 */   { ADDR , EXTENDED, 
  1834.         "fe;6f;[3=]~.1&T!.8I.1|;[2=]y[1=]~.3&T!.8I;" },
  1835. /* MUL 170 */   { ADDR , DIRECT, 
  1836.         "fe;4f;[4=]~.1&T!.8I;[3=]r[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1837. /* MUL 171 */   { ADDR , EXTENDED, 
  1838.         "fe;4f;[4=]~.1&T!.8I.1|;[3=]y[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1839. /* MULB 172 */   { ADDR , DIRECT, 
  1840.         "fe;7c;[2=].8I;[1=]~.1&T!.8I;" },
  1841. /* MULB 173 */   { ADDR , EXTENDED, 
  1842.         "fe;7f;01;[2=]y[1=]~.1&T!.8I;" },
  1843. /* MULB 174 */   { ADDR , DIRECT, 
  1844.         "fe;5c;[3=].8I;[2=].8I;[1=]~.1&T!.8I;" },
  1845. /* MULB 175 */   { ADDR , EXTENDED, 
  1846.         "fe;5f;01;[3=]y[2=].8I;[1=]~.1&T!.8I;" },
  1847. /* MULB 176 */   { 0 , 0, 
  1848.         "fe;7d;[2=];[1=]~.1&T!.8I;" },
  1849. /* MULB 177 */   { 0 , 0, 
  1850.         "fe;5d;[3=];[2=].8I;[1=]~.1&T!.8I;" },
  1851. /* MULB 178 */   { 0 , 0, 
  1852.         "fe;7e;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  1853. /* MULB 179 */   { 0 , 0, 
  1854.         "fe;5e;[3=]~.1&T!.8I.[4#]|;[2=].8I;[1=]~.1&T!.8I;" },
  1855. /* MULB 180 */   { ADDR , DIRECT, 
  1856.         "fe;7f;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  1857. /* MULB 181 */   { ADDR , EXTENDED, 
  1858.         "fe;7f;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  1859. /* MULB 182 */   { ADDR , DIRECT, 
  1860.         "fe;5f;[4=]~.1&T!.8I;[3=]r[2=].8I;[1=]~.1&T!.8I;" },
  1861. /* MULB 183 */   { ADDR , EXTENDED, 
  1862.         "fe;5f;[4=]~.1&T!.8I.1|;[3=]y[2=].8I;[1=]~.1&T!.8I;" },
  1863. /* MULU 184 */   { ADDR , DIRECT, 
  1864.         "6c;[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1865. /* MULU 185 */   { ADDR , EXTENDED, 
  1866.         "6f;01;[2=]~.1&T!y[1=]~.3&T!.8I;" },
  1867. /* MULU 186 */   { ADDR , DIRECT, 
  1868.         "4c;[3=]~.1&T!.8I;[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1869. /* MULU 187 */   { ADDR , EXTENDED, 
  1870.         "4f;01;[3=]~.1&T!y[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1871. /* MULU 188 */   { 0 , 0, 
  1872.         "6d;[2=]y[1=]~.3&T!.8I;" },
  1873. /* MULU 189 */   { 0 , 0, 
  1874.         "4d;[3=]y[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1875. /* MULU 190 */   { 0 , 0, 
  1876.         "6e;[2=]~.1&T!.8I.[3#]|;[1=]~.3&T!.8I;" },
  1877. /* MULU 191 */   { 0 , 0, 
  1878.         "4e;[3=]~.1&T!.8I.[4#]|;[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1879. /* MULU 192 */   { ADDR , DIRECT, 
  1880.         "6f;[3=]~.1&T!.8I;[2=]r[1=]~.3&T!.8I;" },
  1881. /* MULU 193 */   { ADDR , EXTENDED, 
  1882.         "6f;[3=]~.1&T!.8I.1|;[2=]y[1=]~.3&T!.8I;" },
  1883. /* MULU 194 */   { ADDR , DIRECT, 
  1884.         "4f;[4=]~.1&T!.8I;[3=]r[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1885. /* MULU 195 */   { ADDR , EXTENDED, 
  1886.         "4f;[4=]~.1&T!.8I.1|;[3=]y[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1887. /* MULUB 196 */   { ADDR , DIRECT, 
  1888.         "7c;[2=].8I;[1=]~.1&T!.8I;" },
  1889. /* MULUB 197 */   { ADDR , EXTENDED, 
  1890.         "7f;01;[2=]y[1=]~.1&T!.8I;" },
  1891. /* MULUB 198 */   { ADDR , DIRECT, 
  1892.         "5c;[3=].8I;[2=].8I;[1=]~.1&T!.8I;" },
  1893. /* MULUB 199 */   { ADDR , EXTENDED, 
  1894.         "5f;01;[3=]y[2=].8I;[1=]~.1&T!.8I;" },
  1895. /* MULUB 200 */   { 0 , 0, 
  1896.         "7d;[2=];[1=]~.1&T!.8I;" },
  1897. /* MULUB 201 */   { 0 , 0, 
  1898.         "5d;[3=];[2=].8I;[1=]~.1&T!.8I;" },
  1899. /* MULUB 202 */   { 0 , 0, 
  1900.         "7e;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  1901. /* MULUB 203 */   { 0 , 0, 
  1902.         "5e;[3=]~.1&T!.8I.[4#]|;[2=].8I;[1=]~.1&T!.8I;" },
  1903. /* MULUB 204 */   { ADDR , DIRECT, 
  1904.         "7f;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  1905. /* MULUB 205 */   { ADDR , EXTENDED, 
  1906.         "7f;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  1907. /* MULUB 206 */   { ADDR , DIRECT, 
  1908.         "5f;[4=]~.1&T!.8I;[3=]r[2=].8I;[1=]~.1&T!.8I;" },
  1909. /* MULUB 207 */   { ADDR , EXTENDED, 
  1910.         "5f;[4=]~.1&T!.8I.1|;[3=]y[2=].8I;[1=]~.1&T!.8I;" },
  1911. /* NEG 208 */   { 0 , 0, 
  1912.         "03;[1=]~.1&T!.8I;" },
  1913. /* NEGB 209 */   { 0 , 0, 
  1914.         "13;[1=].8I;" },
  1915. /* NOP 210 */   { 0 , 0, 
  1916.         "fd;" },
  1917. /* NORML 211 */   { 0 , 0, 
  1918.         "0f;[2=].8I;[1=]~.3&T!.8I;" },
  1919. /* NOT 212 */   { 0 , 0, 
  1920.         "02;[1=]~.1&T!.8I;" },
  1921. /* NOTB 213 */   { 0 , 0, 
  1922.         "12;[1=].8I;" },
  1923. /* OR 214 */   { ADDR , DIRECT, 
  1924.         "80;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1925. /* OR 215 */   { ADDR , EXTENDED, 
  1926.         "83;01;[2=]~.1&T!y[1=]~.1&T!.8I;" },
  1927. /* OR 216 */   { 0 , 0, 
  1928.         "81;[2=]y[1=]~.1&T!.8I;" },
  1929. /* OR 217 */   { 0 , 0, 
  1930.         "82;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  1931. /* OR 218 */   { ADDR , DIRECT, 
  1932.         "83;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  1933. /* OR 219 */   { ADDR , EXTENDED, 
  1934.         "83;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  1935. /* ORB 220 */   { ADDR , DIRECT, 
  1936.         "90;[2=].8I;[1=].8I;" },
  1937. /* ORB 221 */   { ADDR , EXTENDED, 
  1938.         "93;01;[2=]y[1=].8I;" },
  1939. /* ORB 222 */   { 0 , 0, 
  1940.         "91;[2=];[1=].8I;" },
  1941. /* ORB 223 */   { 0 , 0, 
  1942.         "92;[2=]~.1&T!.8I.[3#]|;[1=].8I;" },
  1943. /* ORB 224 */   { ADDR , DIRECT, 
  1944.         "93;[3=]~.1&T!.8I;[2=]r[1=].8I;" },
  1945. /* ORB 225 */   { ADDR , EXTENDED, 
  1946.         "93;[3=]~.1&T!.8I.1|;[2=]y[1=].8I;" },
  1947. /* POP 226 */   { ADDR , DIRECT, 
  1948.         "cc;[1=]~.1&T!.8I;" },
  1949. /* POP 227 */   { ADDR , EXTENDED, 
  1950.         "cf;01;[1=]~.1&T!y" },
  1951. /* POP 228 */   { 0 , 0, 
  1952.         "ce;[1=]~.1&T!.8I.[2#]|;" },
  1953. /* POP 229 */   { ADDR , DIRECT, 
  1954.         "cf;[2=]~.1&T!.8I;[1=]r" },
  1955. /* POP 230 */   { ADDR , EXTENDED, 
  1956.         "cf;[2=]~.1&T!.8I.1|;[1=]y" },
  1957. /* POPA 231 */   { CPU196 , CPU196, 
  1958.         "f5;" },
  1959. /* POPF 232 */   { 0 , 0, 
  1960.         "f3;" },
  1961. /* PUSH 233 */   { ADDR , DIRECT, 
  1962.         "c8;[1=]~.1&T!.8I;" },
  1963. /* PUSH 234 */   { ADDR , EXTENDED, 
  1964.         "cb;01;[1=]~.1&T!y" },
  1965. /* PUSH 235 */   { 0 , 0, 
  1966.         "c9;[1=]y" },
  1967. /* PUSH 236 */   { 0 , 0, 
  1968.         "ca;[1=]~.1&T!.8I.[2#]|;" },
  1969. /* PUSH 237 */   { ADDR , DIRECT, 
  1970.         "cb;[2=]~.1&T!.8I;[1=]r" },
  1971. /* PUSH 238 */   { ADDR , EXTENDED, 
  1972.         "cb;[2=]~.1&T!.8I.1|;[1=]y" },
  1973. /* PUSHA 239 */   { CPU196 , CPU196, 
  1974.         "f4;" },
  1975. /* PUSHF 240 */   { 0 , 0, 
  1976.         "f2;" },
  1977. /* RET 241 */   { 0 , 0, 
  1978.         "f0;" },
  1979. /* RST 242 */   { 0 , 0, 
  1980.         "ff;" },
  1981. /* SCALL 243 */   { 0 , 0, 
  1982.         "[1=].Q.2+-.bR.2800|x" },
  1983. /* SETC 244 */   { 0 , 0, 
  1984.         "f9;" },
  1985. /* SHL 245 */   { 0 , 0, 
  1986.         "09;[2=].8I~.24<T!;[1=]~.1&T!.8I;" },
  1987. /* SHL 246 */   { 0 , 0, 
  1988.         "09;[2=].4I;[1=]~.1&T!.8I;" },
  1989. /* SHLB 247 */   { 0 , 0, 
  1990.         "19;[2=].8I~.24<T!;[1=].8I;" },
  1991. /* SHLB 248 */   { 0 , 0, 
  1992.         "19;[2=].4I;[1=].8I;" },
  1993. /* SHLL 249 */   { 0 , 0, 
  1994.         "0d;[2=].8I~.24<T!;[1=]~.3&T!.8I;" },
  1995. /* SHLL 250 */   { 0 , 0, 
  1996.         "0d;[2=].4I;[1=]~.3&T!.8I;" },
  1997. /* SHR 251 */   { 0 , 0, 
  1998.         "08;[2=].8I~.24<T!;[1=]~.1&T!.8I;" },
  1999. /* SHR 252 */   { 0 , 0, 
  2000.         "08;[2=].4I;[1=]~.1&T!.8I;" },
  2001. /* SHRA 253 */   { 0 , 0, 
  2002.         "0a;[2=].8I~.24<T!;[1=]~.1&T!.8I;" },
  2003. /* SHRA 254 */   { 0 , 0, 
  2004.         "0a;[2=].4I;[1=]~.1&T!.8I;" },
  2005. /* SHRAB 255 */   { 0 , 0, 
  2006.         "1a;[2=].8I~.24<T!;[1=].8I;" },
  2007. /* SHRAB 256 */   { 0 , 0, 
  2008.         "1a;[2=].4I;[1=].8I;" },
  2009. /* SHRAL 257 */   { 0 , 0, 
  2010.         "0e;[2=].8I~.24<T!;[1=]~.3&T!.8I;" },
  2011. /* SHRAL 258 */   { 0 , 0, 
  2012.         "0e;[2=].4I;[1=]~.3&T!.8I;" },
  2013. /* SHRB 259 */   { 0 , 0, 
  2014.         "18;[2=].8I~.24<T!;[1=].8I;" },
  2015. /* SHRB 260 */   { 0 , 0, 
  2016.         "18;[2=].4I;[1=].8I;" },
  2017. /* SHRL 261 */   { 0 , 0, 
  2018.         "0c;[2=].8I~.24<T!;[1=]~.3&T!.8I;" },
  2019. /* SHRL 262 */   { 0 , 0, 
  2020.         "0c;[2=].4I;[1=]~.3&T!.8I;" },
  2021. /* SJMP 263 */   { 0 , 0, 
  2022.         "[1=].Q.2+-.bR.2000|x" },
  2023. /* SKIP 264 */   { 0 , 0, 
  2024.         "00;[1=];" },
  2025. /* ST 265 */   { ADDR , DIRECT, 
  2026.         "c0;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  2027. /* ST 266 */   { ADDR , EXTENDED, 
  2028.         "c3;01;[2=]~.1&T!y[1=]~.1&T!.8I;" },
  2029. /* ST 267 */   { 0 , 0, 
  2030.         "c2;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  2031. /* ST 268 */   { ADDR , DIRECT, 
  2032.         "c3;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  2033. /* ST 269 */   { ADDR , EXTENDED, 
  2034.         "c3;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  2035. /* STB 270 */   { ADDR , DIRECT, 
  2036.         "c4;[2=].8I;[1=].8I;" },
  2037. /* STB 271 */   { ADDR , EXTENDED, 
  2038.         "c7;01;[2=]y[1=].8I;" },
  2039. /* STB 272 */   { 0 , 0, 
  2040.         "c6;[2=]~.1&T!.8I.[3#]|;[1=].8I;" },
  2041. /* STB 273 */   { ADDR , DIRECT, 
  2042.         "c7;[3=]~.1&T!.8I;[2=]r[1=].8I;" },
  2043. /* STB 274 */   { ADDR , EXTENDED, 
  2044.         "c7;[3=]~.1&T!.8I.1|;[2=]y[1=].8I;" },
  2045. /* SUB 275 */   { ADDR , DIRECT, 
  2046.         "68;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  2047. /* SUB 276 */   { ADDR , EXTENDED, 
  2048.         "6b;01;[2=]~.1&T!y[1=]~.1&T!.8I;" },
  2049. /* SUB 277 */   { ADDR , DIRECT, 
  2050.         "48;[3=]~.1&T!.8I;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  2051. /* SUB 278 */   { ADDR , EXTENDED, 
  2052.         "4b;01;[3=]~.1&T!y[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  2053. /* SUB 279 */   { 0 , 0, 
  2054.         "69;[2=]y[1=]~.1&T!.8I;" },
  2055. /* SUB 280 */   { 0 , 0, 
  2056.         "49;[3=]y[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  2057. /* SUB 281 */   { 0 , 0, 
  2058.         "6a;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  2059. /* SUB 282 */   { 0 , 0, 
  2060.         "4a;[3=]~.1&T!.8I.[4#]|;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  2061. /* SUB 283 */   { ADDR , DIRECT, 
  2062.         "6b;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  2063. /* SUB 284 */   { ADDR , EXTENDED, 
  2064.         "6b;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  2065. /* SUB 285 */   { ADDR , DIRECT, 
  2066.         "4b;[4=]~.1&T!.8I;[3=]r[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  2067. /* SUB 286 */   { ADDR , EXTENDED, 
  2068.         "4b;[4=]~.1&T!.8I.1|;[3=]y[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  2069. /* SUBB 287 */   { ADDR , DIRECT, 
  2070.         "78;[2=].8I;[1=].8I;" },
  2071. /* SUBB 288 */   { ADDR , EXTENDED, 
  2072.         "7b;01;[2=]y[1=].8I;" },
  2073. /* SUBB 289 */   { ADDR , DIRECT, 
  2074.         "58;[3=].8I;[2=].8I;[1=].8I;" },
  2075. /* SUBB 290 */   { ADDR , EXTENDED, 
  2076.         "5b;01;[3=]y[2=].8I;[1=].8I;" },
  2077. /* SUBB 291 */   { 0 , 0, 
  2078.         "79;[2=];[1=].8I;" },
  2079. /* SUBB 292 */   { 0 , 0, 
  2080.         "59;[3=];[2=].8I;[1=].8I;" },
  2081. /* SUBB 293 */   { 0 , 0, 
  2082.         "7a;[2=]~.1&T!.8I.[3#]|;[1=].8I;" },
  2083. /* SUBB 294 */   { 0 , 0, 
  2084.         "5a;[3=]~.1&T!.8I.[4#]|;[2=].8I;[1=].8I;" },
  2085. /* SUBB 295 */   { ADDR , DIRECT, 
  2086.         "7b;[3=]~.1&T!.8I;[2=]r[1=].8I;" },
  2087. /* SUBB 296 */   { ADDR , EXTENDED, 
  2088.         "7b;[3=]~.1&T!.8I.1|;[2=]y[1=].8I;" },
  2089. /* SUBB 297 */   { ADDR , DIRECT, 
  2090.         "5b;[4=]~.1&T!.8I;[3=]r[2=].8I;[1=].8I;" },
  2091. /* SUBB 298 */   { ADDR , EXTENDED, 
  2092.         "5b;[4=]~.1&T!.8I.1|;[3=]y[2=].8I;[1=].8I;" },
  2093. /* SUBC 299 */   { ADDR , DIRECT, 
  2094.         "a8;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  2095. /* SUBC 300 */   { ADDR , EXTENDED, 
  2096.         "ab;01;[2=]~.1&T!y[1=]~.1&T!.8I;" },
  2097. /* SUBC 301 */   { 0 , 0, 
  2098.         "a9;[2=]y[1=]~.1&T!.8I;" },
  2099. /* SUBC 302 */   { 0 , 0, 
  2100.         "aa;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  2101. /* SUBC 303 */   { ADDR , DIRECT, 
  2102.         "ab;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  2103. /* SUBC 304 */   { ADDR , EXTENDED, 
  2104.         "ab;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  2105. /* SUBCB 305 */   { ADDR , DIRECT, 
  2106.         "b8;[2=].8I;[1=].8I;" },
  2107. /* SUBCB 306 */   { ADDR , EXTENDED, 
  2108.         "bb;01;[2=]y[1=].8I;" },
  2109. /* SUBCB 307 */   { 0 , 0, 
  2110.         "b9;[2=];[1=].8I;" },
  2111. /* SUBCB 308 */   { 0 , 0, 
  2112.         "ba;[2=]~.1&T!.8I.[3#]|;[1=].8I;" },
  2113. /* SUBCB 309 */   { ADDR , DIRECT, 
  2114.         "bb;[3=]~.1&T!.8I;[2=]r[1=].8I;" },
  2115. /* SUBCB 310 */   { ADDR , EXTENDED, 
  2116.         "bb;[3=]~.1&T!.8I.1|;[2=]y[1=].8I;" },
  2117. /* XOR 311 */   { ADDR , DIRECT, 
  2118.         "84;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  2119. /* XOR 312 */   { ADDR , EXTENDED, 
  2120.         "87;01;[2=]~.1&T!y[1=]~.1&T!.8I;" },
  2121. /* XOR 313 */   { 0 , 0, 
  2122.         "85;[2=]y[1=]~.1&T!.8I;" },
  2123. /* XOR 314 */   { 0 , 0, 
  2124.         "86;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  2125. /* XOR 315 */   { ADDR , DIRECT, 
  2126.         "87;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  2127. /* XOR 316 */   { ADDR , EXTENDED, 
  2128.         "87;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  2129. /* XORB 317 */   { ADDR , DIRECT, 
  2130.         "94;[2=].8I;[1=].8I;" },
  2131. /* XORB 318 */   { ADDR , EXTENDED, 
  2132.         "97;01;[2=]y[1=].8I;" },
  2133. /* XORB 319 */   { 0 , 0, 
  2134.         "95;[2=];[1=].8I;" },
  2135. /* XORB 320 */   { 0 , 0, 
  2136.         "96;[2=]~.1&T!.8I.[3#]|;[1=].8I;" },
  2137. /* XORB 321 */   { ADDR , DIRECT, 
  2138.         "97;[3=]~.1&T!.8I;[2=]r[1=].8I;" },
  2139. /* XORB 322 */   { ADDR , EXTENDED, 
  2140.         "97;[3=]~.1&T!.8I.1|;[2=]y[1=].8I;" },
  2141.     { 0,0,""} };
  2142. /* end fraptabdef.c */
  2143.